Clause LEFT JOIN avec plusieurs tables et fonction Sum() [Résolu]

Signaler
Messages postés
38
Date d'inscription
lundi 16 avril 2018
Statut
Membre
Dernière intervention
28 octobre 2020
-
Messages postés
38
Date d'inscription
lundi 16 avril 2018
Statut
Membre
Dernière intervention
28 octobre 2020
-
Bonjour,

J'aurais une question par rapport à la clause LEFT JOIN.

Vous m'avez récemment aidé pour obtenir une somme grâce à la fonction sum() selon les données contenues dans une table jointe, et ce, avec succès. Le but était d'obtenir la somme des dépenses A reliées aux enregistrements contenus dans ma requête en plus de conserver les enregistrements de la requête qui ne possèdent pas de dépenses.

Cependant, lorsque j'essaie de joindre une deuxième table ou plus (car j'en aurais trois à joindre en réalité) de la même façon dans cette même requête afin d'obtenir la somme des dépenses B et C, les montants du champ calculé sont multipliés par deux. Ça affecte également le calcule des dépenses A. Pour le bien de l'exercice, commençons par essayer d'ajouter le calcul des dépenses B d'abord.

Voici les noms de mes objets en lien avec mon problème:
- Ma requête principale dans laquelle je souhaite instaurer les champs calculés [SOM_DA] et [SOM_DSA] se nomme [05-01-PLATEFORME].
- Les dépenses A proviennent de la table [07-DÉPENSES_AUTRES] et sont représentées par le champ [NET_DA] dont je souhaite faire la somme dans ma requête.
- Les dépenses B proviennent de la table [09-DÉPENSES_SAL_AUTRES] et sont représentées par le champ [Cout_DSA] dont je souhaite faire la somme de la même façon que les dépenses A.

Voici mon code SQL pour ma requête problématique:
SELECT [08_00-CHOIX_ALLOC_TABLE].No_AL, [06-ALLOCATIONS_BUDGET].NoET_AL, [03-ÉTABLISSEMENTS].Nom_ET, [08_00-CHOIX_ALLOC_TABLE].Expr1, [03-ÉTABLISSEMENTS].CoUT_ET, [02-UTILISATEURS].Nom_UT, [06-ALLOCATIONS_BUDGET].NoME_AL, [05-MESURES].Titre_ME, [05-MESURES].NoRM_ME, [04-REGROUPEMENTS_M].Titre_RM, [06-ALLOCATIONS_BUDGET].BudCal_AL, Sum([07-DÉPENSES_AUTRES].NET_DA) AS SOM_DA, Sum([09-DÉPENSES_SAL_AUTRES].Cout_DSA) AS SOM_DSA
FROM ([04-REGROUPEMENTS_M] 
INNER JOIN [05-MESURES] ON [04-REGROUPEMENTS_M].No_RM = [05-MESURES].NoRM_ME) 
INNER JOIN (([02-UTILISATEURS] 
INNER JOIN [03-ÉTABLISSEMENTS] ON [02-UTILISATEURS].Code_UT = [03-ÉTABLISSEMENTS].CoUT_ET) 
INNER JOIN ((([06-ALLOCATIONS_BUDGET] 
INNER JOIN [08_00-CHOIX_ALLOC_TABLE] ON [06-ALLOCATIONS_BUDGET].No_AL = [08_00-CHOIX_ALLOC_TABLE].No_AL) 
LEFT JOIN [07-DÉPENSES_AUTRES] ON [08_00-CHOIX_ALLOC_TABLE].No_AL = [07-DÉPENSES_AUTRES].[NoAL_DA]) 
LEFT JOIN [09-DÉPENSES_SAL_AUTRES] ON [08_00-CHOIX_ALLOC_TABLE].No_AL = [09-DÉPENSES_SAL_AUTRES].[NoAL_DSA]) ON [03-ÉTABLISSEMENTS].No_ET = [06-ALLOCATIONS_BUDGET].NoET_AL) ON [05-MESURES].No_ME = [06-ALLOCATIONS_BUDGET].NoME_AL
GROUP BY [08_00-CHOIX_ALLOC_TABLE].No_AL, [06-ALLOCATIONS_BUDGET].NoET_AL, [03-ÉTABLISSEMENTS].Nom_ET, [08_00-CHOIX_ALLOC_TABLE].Expr1, [03-ÉTABLISSEMENTS].CoUT_ET, [02-UTILISATEURS].Nom_UT, [06-ALLOCATIONS_BUDGET].NoME_AL, [05-MESURES].Titre_ME, [05-MESURES].NoRM_ME, [04-REGROUPEMENTS_M].Titre_RM, [06-ALLOCATIONS_BUDGET].BudCal_AL;


Et voici mon lien pour avoir accès à ma base de données:
https://drive.google.com/file/d/10j2a-5T7B67r9M4xeLkNqVaGPJD3wFLo/view?usp=sharing

Est-il possible d'éviter que les données se doublent ?

Merci beaucoup!! :)

2 réponses

Messages postés
12877
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
31 octobre 2020
717
bonjour,
c'est possible, et assez simple. cela va aussi simplifier et clarifier les requêtes:
- il ne faut pas faire les LEFT JOIN et les sommes dans [05-01-PLATEFORME], il faut donc retirer cela de cette requête
- il faut faire une nouvelle requête qui utilise comme source les trois requêtes [05-01-PLATEFORME], 05_01-SOMME_DA et 05_01-SOMME_DSA.
Messages postés
38
Date d'inscription
lundi 16 avril 2018
Statut
Membre
Dernière intervention
28 octobre 2020

En effet ça fonctionne!!

Le pire dans tout ça c'est que je l'avais essayé.. Ce qui n'avait pas marché était lié au fait que ça indiquait "Regroupement" dans le type d'opération alors que j'avais simplement à le changer pour "Expression".

Un gros merci encore, ton aide est très appréciée!