Clause LEFT JOIN avec plusieurs tables et fonction Sum()
Résolu
BiankaBo
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
BiankaBo Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
BiankaBo Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
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:
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!! :)
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!! :)
A voir également:
- Left join plusieurs tables
- Tables des matières word - Guide
- Tables ascii - Guide
- Join pdf - Télécharger - PDF
- Left shift clavier ✓ - Forum Jeux vidéo
- Touche left shift bloquée macbook - Forum MacOS
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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.