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 :

Problème jointure multiple


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème jointure multiple
    Bonjour à tous,

    Je suis actuellement face à un problème. J'ai une base à 4 tables dans lesquelles je dois puiser des informations pour créer des statistiques.

    Mes quatre tables sont : Commandes, Devis, Temps, Vendeurs. À celles-ci se rajoute une table de liaison "CommandesDevis".

    Dans les tables Commandes et Devis se trouvent une clé étrangère "id_vendeur" qui sont donc liées à la table "Vendeurs".
    De même, dans les deux tables Commandes et Devis se trouvent une clé étrangère "Date" qui est liée à la table "Temps"

    Voici mon code le plus "proche" du résultat souhaité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT Vendeurs.id_vendeur, Vendeurs.VendeurInit, Vendeurs.VendeurNom, COUNT(Devis.DevNum)as devs, COUNT(Commandes.CdeNum) as cmds
     
    FROM Vendeurs
     
    FULL JOIN Devis ON Vendeurs.id_vendeur = Devis.id_vendeur
    FULL JOIN CommandesDevis ON Devis.id_devis = CommandesDevis.id_devis
    FULL JOIN Commandes ON Commandes.id_commande = CommandesDevis.id_commande
    INNER JOIN Temps ON Devis.DevDate = Temps.id_temps
     
    WHERE Temps.id_temps >= '17899' and Temps.id_temps <= '17906'
    GROUP BY Vendeurs.id_vendeur, Vendeurs.VendeurInit, Vendeurs.VendeurNom
    ORDER BY Vendeurs.id_vendeur;
    Voici une image du rendu : Nom : Capture2.PNG
Affichages : 333
Taille : 6,2 Ko

    Mon problème se situe au niveau des compteurs : Je n'arrive pas à avoir les bons chiffres pour les deux compteurs en même temps.
    C'est soit l'un, soit l'autre.
    Dans le cas présenté au-dessus, la colonne "devs" est correcte tandis que la colonne "cmds" est fausse.

    Si quelqu'un savait comment me sortir de cette horreur sans nom, je suis preneur.
    Aussi, si vous avez besoin d'autres informations, n'hésitez pas !

    Merci .

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 782
    Points : 52 783
    Points
    52 783
    Billets dans le blog
    5
    Par défaut
    C'est normal, vous utilisez un FULL OUTER join !!!!

    AU passage connnaissez vous :
    1) les alias de table ?
    2) l'opérateur BETWEEN ?

    D'autre part votre WHERE sur le temps annule la branche de jointure externe Vendeur => Devis => temps

    Vous devez par exemple écrire...

    soit :
    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 Vendeurs.id_vendeur, Vendeurs.VendeurInit, Vendeurs.VendeurNom, 
           COUNT(Devis.DevNum) as devs, COUNT(Commandes.CdeNum) as cmds
    FROM   Vendeurs AS V
           INNER JOIN Devis AS D 
                ON V.id_vendeur = D.id_vendeur
           LEFT OUTER JOIN CommandesDevis AS CD 
                ON D.id_devis = CD.id_devis
           LEFT OUTER JOIN Commandes AS C 
                ON C.id_commande = CD.id_commande
           INNER JOIN Temps AS T 
                ON D.DevDate = T.id_temps
    WHERE  T.id_temps BETWEEN '17899' and '17906'
    GROUP  BY V.id_vendeur, V.VendeurInit, V.VendeurNom
    ORDER  BY V.id_vendeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT Vendeurs.id_vendeur, Vendeurs.VendeurInit, Vendeurs.VendeurNom, 
           COUNT(Devis.DevNum) as devs, COUNT(Commandes.CdeNum) as cmds
    FROM   Vendeurs AS V
           LEFT OUTER JOIN Devis AS D 
                ON V.id_vendeur = D.id_vendeur
           LEFT OUTER JOIN CommandesDevis AS CD 
                ON D.id_devis = CD.id_devis
           LEFT OUTER JOIN Commandes AS C 
                ON C.id_commande = CD.id_commande
           LEFT OUTER JOIN Temps AS T 
                ON D.DevDate = T.id_temps AND T.id_temps BETWEEN '17899' and '17906'
    GROUP  BY V.id_vendeur, V.VendeurInit, V.VendeurNom
    ORDER  BY V.id_vendeur

    Visiblement vous ne maitrisez pas le langage SQL. Je vous invite à vous y former.
    Mon livre, comme mon site web, peuvent vous y aider :
    http://sqlpro.developpez.com/
    Nom : Couverture SQL Synthex 4e ed - 500.jpg
Affichages : 180
Taille : 77,8 Ko

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Problème Jointure multiple
    Par Beaudelicius dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/12/2011, 17h48
  2. [SQL2005][TSQL]Problème de jointures multiples
    Par Veritas5 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2009, 17h04
  3. Problème Jointures multiples
    Par masseur dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/03/2008, 19h53
  4. Problème de jointure multiple
    Par Max_be dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/10/2007, 21h39
  5. problème requête à jointure multiple...
    Par Ricardo_Tubbs dans le forum Access
    Réponses: 6
    Dernier message: 09/02/2006, 16h45

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