Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2005
    Messages : 145
    Points : 47
    Points
    47

    Par défaut [SQL Server] jointure externe et SUM

    Bonjour a tous,

    je souhaite faire faire des jointures externe entre 3 tables et je recupere de ces tables les fonctions SUM().

    Mon probleme est que cela fonction quand je le fais sur les tables séparement c'est a dire juste entre 2 tables mais quand je fais ma requete avec les 2 jointures externes, il ne me sort pas les bon resultats...

    voic ma requete
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT
      Vue_Ctr_Anniversaire."Contract No_",
      SUM(Vue_Client_Facture_Avoir.Total_HT) AS "Facturé",
      SUM(Excel_CTR_FACTU_SPEC_Avoirs."TOTAL AVOIR") AS "TOTAL AVOIR"
    FROM
      Vue_Ctr_Anniversaire
    	LEFT JOIN Excel_CTR_FACTU_SPEC_Avoirs ON ( Vue_Ctr_Anniversaire."Contract No_"=Excel_CTR_FACTU_SPEC_Avoirs."CONTRAT 2006")
    	LEFT JOIN Vue_Client_Facture_Avoir ON ( Vue_Ctr_Anniversaire."Contract No_"=Vue_Client_Facture_Avoir."No Affaire ")
    GROUP BY
      Vue_Ctr_Anniversaire."Contract No_"
    je dois avoir un probleme au niveau des jointure mais je ne sais pas où?

    Merci pour votre aide

    Tzoulou

  2. #2
    Xo
    Xo est déconnecté
    Expert Confirmé
    Avatar de Xo
    Inscrit en
    janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : janvier 2005
    Messages : 2 701
    Points : 3 957
    Points
    3 957

    Par défaut

    Salut,

    Merci de respecter les CONSEILS... à lire AVANT de POSTER et de préciser ton SGBD stp

    Citation Envoyé par TangoZoulou
    il ne me sort pas les bon resultats...
    C'est à dire ? Il te manque des lignes ? Ou les totaux sont faux ?

    Je pense qu'il faudrait que tu applique une fonction COALESCE (ou autre selon ton SGBD) qui transforme les valeur NULL en 0.

    Ex :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
      Vue_Ctr_Anniversaire."Contract No_",
      SUM(COALESCE(Vue_Client_Facture_Avoir.Total_HT, 0)) AS "Facturé",
      SUM(COALESCE(Excel_CTR_FACTU_SPEC_Avoirs."TOTAL AVOIR", 0)) AS "TOTAL AVOIR"
    FROM
      Vue_Ctr_Anniversaire
        LEFT JOIN Excel_CTR_FACTU_SPEC_Avoirs ON ( Vue_Ctr_Anniversaire."Contract No_"=Excel_CTR_FACTU_SPEC_Avoirs."CONTRAT 2006")
        LEFT JOIN Vue_Client_Facture_Avoir ON ( Vue_Ctr_Anniversaire."Contract No_"=Vue_Client_Facture_Avoir."No Affaire ")
    GROUP BY
      Vue_Ctr_Anniversaire."Contract No_"
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2005
    Messages : 145
    Points : 47
    Points
    47

    Par défaut

    désolé, je suis sur SQL server


    1) les resultats qu'il me resort sont faux car il double tout. quand je fais ces requete separement les resultats sont bon mais quand je les assemble il fait la somme des doublons donc j'ai essayé de passer par SUM(DISTINCT) mais dans ce cas il me supprime certain doublon qui ne sont pas de doublons du au mauvais resultats

    2) voila ce que je veux au final
    j'ai une table avec deux champs principaux
    Vue_Client_Facture_Avoir (contrat, Facturé)
    Excel_CTR_FACTU_SPEC_Avoirs (contrat, Avoir)

    je veux faire la somme des Facturé par contrat donc SUM avec un GROUP BY
    et meme chose pour Excel_CTR_FACTU_SPEC_Avoirs

    et une fois les sommes effectués je veux les regroupe avec une autre table pour avoir par contrat
    mes infos venant de Vue_Ctr_Anniversaire et le total de facture et d'avoir par contrat

    j'espere etre assez clair si ce n'est pas le cas dites le moi

    Merci

  4. #4
    Xo
    Xo est déconnecté
    Expert Confirmé
    Avatar de Xo
    Inscrit en
    janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : janvier 2005
    Messages : 2 701
    Points : 3 957
    Points
    3 957

    Par défaut

    c'est normal qu'il double les résultats, fais ta requête sans les SUM et le GROUP BY, et cumule les lignes, tu obtiendras bien le double de tes montants si tu as un enregistrement dans chacune de tes table "Avoir".

    La solution passe par des sous-requêtes, qui vont te calculer tes montants : est-ce que la requête ci-dessous te ramène un résultat juste ?

    Code :
    1
    2
    3
    4
    5
    6
    7
    SELECT
        Vue_Ctr_Anniversaire."Contract No_",
        (SELECT SUM(COALESCE(Vue_Client_Facture_Avoir.Total_HT, 0))
           FROM Vue_Client_Facture_Avoir 
          WHERE Vue_Ctr_Anniversaire."Contract No_" = Vue_Client_Facture_Avoir."No Affaire ") "Facturé"
    FROM
        Vue_Ctr_Anniversaire
    Si oui, tu n'a plus qu'à rajouter la sous-requête correspondant à la table Excel_CTR_FACTU_SPEC_Avoirs,
    Si non, explique-nous tes soucis
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  5. #5
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2005
    Messages : 145
    Points : 47
    Points
    47

    Par défaut

    ta solution passe, je ne savais pas qu'on pouvait lié les conditions d'une sous requete avec la requete mere, je suis etonné...
    et ton group by et sous entendu par le lien entre la requete et la sous requete pas mal !
    mais c'est assez chaud !


    moi j'etais parti sur une autre piste car l'execution est assez longue.

    toujour en faisant une jointure mais au lieu de faire reference a une table je fais reference a une sous requete dis moi ce que tu en penses ca marche pour un maintenant je teste pour voir avec les 2

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SELECT
      Vue_Ctr_Anniversaire."Contract No_",
       test.Facturé
    FROM
      Vue_Ctr_Anniversaire
    LEFT JOIN (	
    	SELECT Vue_Ctr_Anniversaire."Contract No_"  , SUM(Vue_Client_Facture_Avoir.Total_HT) AS "Facturé" 
    	FROM
    	  Vue_Ctr_Anniversaire
    	LEFT JOIN Vue_Client_Facture_Avoir
    	ON ( Vue_Ctr_Anniversaire."Contract No_"=Vue_Client_Facture_Avoir."No Affaire "  
    		AND mes conditions....))
    	GROUP BY Vue_Ctr_Anniversaire."Contract No_") AS test 
    ON ( Vue_Ctr_Anniversaire."Contract No_"=test."Contract No_")

  6. #6
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2005
    Messages : 145
    Points : 47
    Points
    47

    Par défaut

    oui ca peut paraitre bizarre d'avoir deux fois la vue une fois dans la reqquete et une seconde fois dans la sous requete mais j'en ai besoin dans mes conditions

  7. #7
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : septembre 2005
    Messages : 145
    Points : 47
    Points
    47

    Par défaut

    Et bien cette solution a bien fonctionné, je ne sais pas si c'est tres academique mais en tout cas cela fonctionne j'ai donc fait des sous requete que j'ai lié a une table avec des jointures externes
    bon il fallu que je synchronise quelques champs pour eviter des doublons mais tout est OK

    Merci pour ton aide Xo

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •