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

Langage SQL Discussion :

[Débutant]Somme et jointure externe


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut [Débutant]Somme et jointure externe
    Salut les gars, je suis un pauvre fonctionnel qui essaie de faire des rapports SQL et ma connaissance en SQL est limitée.
    Je vous explique le problème:

    J'ai une table A avec une liste de région (champ CODE)
    J'ai une table B avec des montants en cours, et chaque ligne porte un code région, donc on peut simplifier en disant que la table porte (CODE, EN_COURS) comme champ
    J'ai une table C avec des montants facturés, et chaque ligne porte aussi un code région: (CODE, FACT)
    Une région peut avoir 0 à n lignes dans la table B, et 0 à n lignes dans la table C.

    Mon but est d'obtenir la liste des régions avec une colonne portant la somme des en cours sur la région, et une autre portant la somme des facturés sur la région

    Je suis donc parti de ma table A, puis jointure externe sur les tables B et C, group by(A.CODE) et sum(B.EN_COURS) et sum(C.FACT).

    Ca donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT      A.CODE, SUM(B.EN_COURS), SUM(C.FACT) 
     
    FROM         A LEFT OUTER JOIN
                    C ON A.CODE= C.CODE LEFT OUTER JOIN
                    B ON A.CODE= B.CODE
    GROUP BY A.CODE
    Ma première colonne me donne un résultat correct, mais la deuxième me donne un résultat muliplié par le nombre de lignes de la première partie de ma requête: problème typique de jointure.

    J'espère que vous pourrez me dépanner, car la je sèche.

    Merci

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Si ça se trouve, je suis dans ta DSI
    Allez, trève de plaisanterie...

    Tu peux tenter de découper les étapes.
    1) Les en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT      A.CODE as CODE, SUM(B.EN_COURS) as ENCOURS, 0 as FACT
    FROM         A LEFT OUTER JOIN B 
        ON A.CODE= B.CODE
    GROUP BY A.CODE
    2) Les factures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT      A.CODE as CODE, 0 as ENCOURS, SUM(C.FACT) as FACT
    FROM         A LEFT OUTER JOIN C 
        ON A.CODE= C.CODE
    GROUP BY A.CODE
    3) Le total !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT CODE, SUM(EN_COURS), SUM(FACT)
    FROM (
    SELECT      A.CODE as CODE, SUM(B.EN_COURS) as ENCOURS, 0 as FACT
    FROM         A LEFT OUTER JOIN B 
        ON A.CODE= B.CODE
    GROUP BY A.CODE
    UNION ALL
    SELECT      A.CODE as CODE, 0 as ENCOURS, SUM(C.FACT) as FACT
    FROM         A LEFT OUTER JOIN C 
        ON A.CODE= C.CODE
    GROUP BY A.CODE
    )
    GROUP BY CODE
    (j'ai pas testé, j'espère ne pas raconter de conneries...)

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Alors l'union des deux requêtes fonctionne bien, par contre le select final qui encapsule les deux ne fonctionne pas.
    Du coup j'ai essayé plus simple, j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CODE, EN_COURS, FACT
    FROM ( 
    la grosse requête
    )
    juste pour voir, et je me paie un erreur :"Syntaxe incorrecte vers ')'".
    Des idées?.
    Merci pour ton aide en tout cas

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 398
    Points
    28 398
    Par défaut
    Une table dérivée doit être associée à un nom d'alias
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CODE, EN_COURS, FACT
    FROM ( 
    la grosse requête
    ) AS nom_d_alias

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Super, ca marche merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/12/2014, 12h49
  2. [Débutant]Soucis requête jointure externes (8-i)
    Par jdotti dans le forum Oracle
    Réponses: 7
    Dernier message: 14/10/2005, 15h39
  3. [CR9] faire une Jointure externe
    Par coldec dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 28/06/2005, 12h10
  4. [ jointure externe ] j'y pompe rien
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/12/2003, 17h57
  5. [Interbase] [Triggers] jointure externe
    Par AnestheziE dans le forum InterBase
    Réponses: 9
    Dernier message: 17/11/2003, 16h17

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