IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Résultat de 2 requêtes en une


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut Résultat de 2 requêtes en une
    bonjour,
    Voila j'ai un trou, est il possible de rajouter a la premiere requete la somme des jours trouvé dans la deuxieme requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    -- premiere requête -----------------------------------------------------
    select
    Agence,
    sum(case [Type Article] when '1' then cast([Forecast Quantity (Base)] as float) else 0 end )as Poules,
    sum(case [Type Article] when '2' then cast([Forecast Quantity (Base)] as float) else 0 end )as canard,
    sum(case [Type Article] 
    	when '1' then cast([Forecast Quantity (Base)] as float)
    	when '2' then cast([Forecast Quantity (Base)] as float)
    	else 0 end )as PouletCana
    sum(case [Type Article] when '4' then cast([Forecast Quantity (Base)] as float) else 0 end )as Oie,
    sum(case [Type Article] when '5' then cast([Forecast Quantity (Base)] as float) else 0 end )as Dindes,
    sum(case [Type Article] when '6' then cast([Forecast Quantity (Base)] as float) else 0 end )as boeuf,
    sum(case [Type Article] 
    	when '1' then cast([Forecast Quantity (Base)] as float)
    	when '2' then cast([Forecast Quantity (Base)] as float)
    	when '4' then cast([Forecast Quantity (Base)] as float)
    	when '5' then cast([Forecast Quantity (Base)] as float)	
    	when '6' then cast([Forecast Quantity (Base)] as float)
    	else 0 end )as UnitBase
    from dbo.[BASE$Production]
    where  [Forecast Date] between '01/06/09' and '30/06/09'
    group by Agence
    order by Agence
     
    -- deuxieme requête ------------------------------------------------------
    select
    Agence,
    max(cast([Forecast Quantity (Base)]as float)) as Jours
    from dbo.[BASE$Production]
    where [Forecast Date] between '01/05/09' and '31/05/09'
    and No_ = 'F1'
    group by Agence,Equipe,[Document No_],[Forecast Date]
    order by Agence
    pour avoir comme resultat un tableau avec les en tetes suivantes :

    <------------ 1er requete ----------------------------------------------><--2 ieme requete ->
    Agence - Poules - canard - PouletCana - Oie - Dindes - boeuf - UnitBase - Jours
    valeur - valeur - valeur - valeur - valeur - valeur - valeur - valeur - valeur
    merci de votre aide

  2. #2
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut
    Bonsoir,

    Sans vraiment comprendre ce que vous voulez faire exactement.

    Ce genre d'opération se fait avec une jointure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT A.*, B.Jours FROM
    (Requete1) A 
    LEFT JOIN (Requete2) B ON A.Agence = B.Agence
    Quand vous utilisez une jointure, vous devez forcément savoir comment vous aller faire correspondre les lignes des deux ensembles de résultats.

    Ici par exemple, on utilise une jointure gauche, on veut ramener toutes les lignes de A (à gauche) et les jours correspondants de B (sur une correspondance d'agence). Le LEFT (jointure gauche) signifie que si on ne trouve pas de correspondance dans B (à droite), on utilisera NULL.

    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    Bonjour agemis31,
    ce que je souhaite, j'ai 2 tables de données :
    - une ou se trouve des valeurs
    - deuxieme ou se trouve des journées

    je veux faire un etat qui concatene les 2 tables avec:
    le cumul des données et des journées par agences pour une periode donnée

    voila
    lorsque j'execute votre solution j'ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*130, Niveau*15, État*1, Ligne*1
    Impossible d'exécuter une fonction d'agrégation sur une expression comportant un agrégat ou une sous-requête.

  4. #4
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut
    Bonjour backdraf,

    Cette erreur se produit quand on essaie d'imbriquer deux fonctions d'agrégation, ou une fontion d'aggrégation sur une sous requête (requête imbriquée ne renvoyant qu'une ligne). Par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(AVG(maColonne)) FROM MaTable
    Dans ce cas il faut faut passer par une table dérivée et écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUM(A.MaMoyenne) 
    FROM (SELECT AVG(MaColonne) MaMoyenne FROM MaTable) A
    Si vous voulez, postez la structure de vos tables (CREATE TABLE), un jeu de données d'essai et votre requête, ce sera plus simple.

    @+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Par défaut
    Bonjour agemis31,
    Je n'ai pas fait de create table,
    Mon but etait de faire une procedure stockée, qui interroge 2 tables et dont le resultat est un fichier plat qui est mis a disposition des agences pour qu'ils l'integres dans leur fichier EXCEL, (etant en plus un gros debutant environ 1 mois d'utilisation SQL-Server) j'ai deja realisé des procedures stockées qui marchent tres bien mais celle ci me donne du mal. Car toutes les solutions que je trouve me retourne la meme reponse probleme agregation.

    en tout cas merci pour votre aide

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Pour réaliser un export excel, il aurait été plus intéressant d'utiliser SSIS

    @++

  7. #7
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 1
    Par défaut
    Citation Envoyé par agemis31 Voir le message
    Bonjour backdraf,

    Cette erreur se produit quand on essaie d'imbriquer deux fonctions d'agrégation, ou une fontion d'aggrégation sur une sous requête (requête imbriquée ne renvoyant qu'une ligne). Par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(AVG(maColonne)) FROM MaTable
    Dans ce cas il faut faut passer par une table dérivée et écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUM(A.MaMoyenne) 
    FROM (SELECT AVG(MaColonne) MaMoyenne FROM MaTable) A
    Si vous voulez, postez la structure de vos tables (CREATE TABLE), un jeu de données d'essai et votre requête, ce sera plus simple.

    @+
    Merci Agemis31 je suivais cette discussion pour un autre problème mais ce présent code m'enlève une épine du pied.
    merci enormement!!!!!!!!!!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Résultat de 2 requêtes dans une même JTable
    Par couakie dans le forum Composants
    Réponses: 4
    Dernier message: 04/02/2011, 10h13
  2. Conserver le résultat d'un requête dans une TTable ?
    Par Xpmich dans le forum Bases de données
    Réponses: 1
    Dernier message: 07/08/2009, 11h03
  3. [VxiR2] Résultat d'un requête dans une variable
    Par ltousch dans le forum Designer
    Réponses: 3
    Dernier message: 23/01/2009, 18h35
  4. Regrouper les résultats de 3 requêtes en une seule
    Par getz85 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 28/01/2008, 18h39
  5. Résultat de 2 requêtes sur une même ligne
    Par cgone dans le forum SQL
    Réponses: 1
    Dernier message: 20/04/2007, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo