1. #1
    Membre habitué

    Inscrit en
    mai 2010
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 229
    Points : 194
    Points
    194

    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
    Homme Profil pro
    Développeur Freelance
    Inscrit en
    janvier 2009
    Messages
    3 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Freelance

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 116
    Points : 6 400
    Points
    6 400

    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 habitué

    Inscrit en
    mai 2010
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 229
    Points : 194
    Points
    194

    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 confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    2 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 : 2 847
    Points : 4 660
    Points
    4 660
    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 : 37
    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 : 768
    Points
    768

    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: 19/05/2008, 23h07
  2. Requête SQL avec jointure sur trois tables
    Par pit2121 dans le forum SQL
    Réponses: 0
    Dernier message: 19/05/2008, 20h24
  3. Jointure sur trois tables
    Par user126 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2008, 17h07
  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, 14h01
  5. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 11h20

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