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 :

Jointure sur trois tables


Sujet :

Langage SQL

  1. #1
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut Jointure sur trois tables
    Bonjour a tous .
    j'ai trois tables :
    1- Table Client qui contient la liste des clients.
    2- Tables Des Ventes qui contient les bon de ventes des clients.
    3- Tables des versements qui contient les versement des clients.
    mon souci est de connaitre le total des ventes , le total des versements ainsi le solde pour chaque client .
    pour ce but j'ai fait cette requête mais ca donne pas le résultat satisfaisant .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Client.Code_Client , SUM(MonTant_Credit) , SUM(MonTant_Versement)
    From Client , Credit , Versement
    where (Client.Code_Client=Credit.Code_Client) and  (Client.Code_Client=Versement.Code_Client)
    Group By Code_Client
    une aide svp ..

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,
    Pour commencer, il faut revoir les jointures...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select Client.Code_Client , SUM(MonTant_Credit) , SUM(MonTant_Versement)
    From Client
    inner join Credit on Client.Code_Client=Credit.Code_Client
    inner join Versement on Client.Code_Client=Versement.Code_Client
    Group By Code_Client
    D'ailleurs, tu parles de table des ventes, et dans la requête je vois une table Credit. Est-ce normal ?

    Maintenant, qu'est-ce qui ne va pas ?
    1. Les clients sans crédit sont ignorés par la requête (à cause de la jointure interne)
    2. Les clients sans versement sont ignorés par la requête (idem)
    3. Le calcul est faux pour les clients ayant plus d'un "crédit" et/ou plus d'un versement

    Pour moi il faut faire en deux étapes:
    1. Sommer les crédits par client
    2. Sommer les versements par client
    3. Joindre le tout (avec des jointures externes !) en partant de la table Client


    Tatayo.

  3. #3
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Bonjour ,merci tatayo pour la réponse .
    D'ailleurs, tu parles de table des ventes, et dans la requête je vois une table Credit. Est-ce normal ?
    vous avez raison , c'est mon erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Client.Code_Client , SUM(MonTant_Vente) , SUM(MonTant_Versement)
    From Client , Credit , Versement
    where (Client.Code_Client= Vente.Code_Client) and  (Client.Code_Client=Versement.Code_Client)
    Group By Code_Client


    Maintenant, qu'est-ce qui ne va pas ?
    1. Les clients sans crédit sont ignorés par la requête (à cause de la jointure interne)
    2. Les clients sans versement sont ignorés par la requête (idem)
    3. Le calcul est faux pour les clients ayant plus d'un "crédit" et/ou plus d'un versement

    Pour moi il faut faire en deux étapes:
    1. Sommer les crédits par client
    2. Sommer les versements par client
    3. Joindre le tout (avec des jointures externes !) en partant de la table Client
    donc pour cela dois-je utiliser les vues ?

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Non, des sous-requêtes ou des CTE sont suffisantes :

    Code sql : 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
     
    -- CTE
    with commandes (code_client, montant_commandes)
    as
    (
        select code_client, sum(MonTant_Vente)
        from credit
    ),
    versements (code_client, montant_versements)
    as
    (
        select code_client, sum(MonTant_Versement)
        from versement
    )
    select client.code_client, coalesce(commandes.montant_commandes, 0) montant_commandes, coalesce(versements.montant_versements, 0) montant_versements
    from client
    left outer join commandes on commandes.code_client = client.code_client
    left outer join versements on versements.code_client = client.code_client

    Ou :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    -- Sous requêtes
    select client.code_client, coalesce((
        select code_client, sum(MonTant_Vente)
        from credit
        where credit.code_client = client.code_client), 0) montant_commandes, coalesce((
        select code_client, sum(MonTant_Versement)
        from versement
        where versement.code_client = client.code_client), 0) montant_versements
    from client
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 1
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Pour commencer, il faut revoir les jointures...
    .....
    Pour moi il faut faire en deux étapes:
    1. Sommer les crédits par client
    2. Sommer les versements par client
    3. Joindre le tout (avec des jointures externes !) en partant de la table Client


    Tatayo.
    Merci,
    Comment puis-je faire

  6. #6
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Je ne vois pas où est votre problème, les réponses fournie sont extrêmement claires et détaillées...

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

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

Discussions similaires

  1. Requete SQL avec jointure sur trois tables
    Par pit2121 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/05/2008, 00h07
  2. Requête SQL avec jointure sur trois tables
    Par pit2121 dans le forum SQL
    Réponses: 0
    Dernier message: 19/05/2008, 21h24
  3. Jointure sur trois tables
    Par user126 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2008, 18h07
  4. [SQL Server 8] Discussion : Full Jointure sur trois tables
    Par Baquardie dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/12/2006, 15h01
  5. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 12h20

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