Fonction DSum() fesant référence à une donnée de la même requête

Résolu/Fermé
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024 - 27 févr. 2020 à 22:14
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024 - 1 mars 2020 à 15:33
Bonjour,

J'aurais besoin de votre aide en ce qui concerne un code SQL dans une requête de ma base de donnée Access.

Il s'agit d'une requête qui extrait des données de plusieurs tables et d'une autre requête que j'ai créée précédemment. J'aimerais créer une expression calculée dans ma requête principale à l'aide de la fonction DSum() dont le critère [XXXXX] se trouve dans une autre colonne résultante de cette même requête: DSum("[NET_DA]";"07-DÉPENSES_AUTRES";"[NoAL_DA]=[XXXXX]").

J'arrive à mes fins par l'entremise d'un formulaire Access, cependant je préférerais obtenir cette donnée directement dans ma requête pour pouvoir la réutiliser plus tard.

Voici mon code SQL complet qui me pose problème:
SELECT [08_00-CHOIX_ALLOC_TABLE].No_AL, [06-ALLOCATIONS_BUDGET].NoET_AL, [03-ÉTABLISSEMENTS].Nom_ET, [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, DSum("[NET_DA]","07-DÉPENSES_AUTRES","[NoAL_DA]=[05_01-PLATEFORME].[No_AL]") AS Expr2
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) ON [03-ÉTABLISSEMENTS].No_ET = [06-ALLOCATIONS_BUDGET].NoET_AL) ON [05-MESURES].No_ME = [06-ALLOCATIONS_BUDGET].NoME_AL;


Sauriez-vous m'aider à résoudre mon problème?

Merci beaucoup! :)

9 réponses

yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
27 févr. 2020 à 23:06
bonjour,
tu n'expliques pas ce que tu veux obtenir.
tu décris un peu ce que tu fais, un peu comment tu voudrais le faire, et cela ne suffit pas.
merci de faire un effort pour présenter ta requête de façon lisible, par exemple:
SELECT [08_00-CHOIX_ALLOC_TABLE].No_AL, [06-ALLOCATIONS_BUDGET].NoET_AL, 
        [03-ÉTABLISSEMENTS].Nom_ET, 
        [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, 
        DSum("[NET_DA]","07-DÉPENSES_AUTRES","[NoAL_DA]=[05_01-PLATEFORME].[No_AL]") AS Expr2
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) 	
	ON [03-ÉTABLISSEMENTS].No_ET = [06-ALLOCATIONS_BUDGET].NoET_AL) 
 ON [05-MESURES].No_ME = [06-ALLOCATIONS_BUDGET].NoME_AL;
0
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024
28 févr. 2020 à 00:40
Oui, désolée.
Je vais synthétiser d'une autre façon.

Requête:
[PRINCIPALE] = ma requête principale dans laquelle je souhaite ajouter l'expression; cette requête est tirée des champs d'autres tables non citées ici pour simplifier ma demande.
Champs: No1, Nom, Expression

Table:
[AUTRE] = une table dans laquelle je vais récupérer mes données pour les mettre dans ma requête principale à l'aide de la fonction DSum().
Champs: No2, Montant

SELECT [PRINCIPALE].No1 , [PRINCIPALE].Nom ,
               DSum("[Montant]" , "AUTRE" , "[No2] = [PRINCIPALE].[No1]") AS Expression
FROM [PRINCIPALE];


C'est donc le calcul de mon Expression qui cause problème, car le système ne reconnait pas la partie [PRINCIPALE].[No1] dans mon critère "[No2] = [PRINCIPALE].[No1]" de la fonction DSum().

Espérant être un peu plus précise dans ma demande.

Merci beaucoup! :)
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
Modifié le 28 févr. 2020 à 01:15
en fait, la requête fonctionne-t'elle?
tu montres ce que tu essaies, tu n'expliques pas ce que tu veux obtenir, ni ne donnes d'exemple.
peut-être:
SELECT [PRINCIPALE].No1 , [PRINCIPALE].Nom , sum(AUTRE.Montant)
 FROM [PRINCIPALE], AUTRE
WHERE AUTRE.No2 = [PRINCIPALE].[No1]
GROUP BY [PRINCIPALE].No1 , [PRINCIPALE].Nom;

et, si tu insistes pour utiliser dsum, peut-être:
SELECT [PRINCIPALE].No1 , [PRINCIPALE].Nom ,
               DSum("[Montant]" , "AUTRE" , "[No2] = " &  [PRINCIPALE].[No1]) AS Expression
FROM [PRINCIPALE];
0
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024
28 févr. 2020 à 03:24
En fait, la requête fonctionne, mais je ne dois pas faire afficher la table [AUTRE] directement dans ma requête pour obtenir toutes les données dont j'ai besoin.

J'ai essayé les deux méthodes que tu m'as proposées, mais ça ne fonctionne toujours pas, car j'ai besoin de voir les enregistrements de la requête [PRINCIPALE] même s'ils sont à zéro au niveau du [Montant] dans la table [AUTRE]. C'est pourquoi j'ai opté pour la fonction DSum().

Voici ce que je veux faire concrètement (vous saurez me dire si DSum() est la solution):

Je souhaite voir, pour chacun des enregistrements [No1], la somme de tous les [Montant] des enregistrements contenus dans la table [AUTRE].

La table [AUTRE] comporte des enregistrements dont le champ [No2] est lié à la clé primaire [No1] apparaissant dans la requête [PRINCIPALE]. Si je fais afficher simplement la table [AUTRE] dans la requête, je me retrouve dans ma requête à avoir plusieurs lignes pour le même [No1], ce qui pourrait probablement se régler par un regroupement, mais je perds aussi tous les autres enregistrements qui ne comportent pas de [Montant] parce qu'il n'a pas nécessairement d'enregistrement lié à tous les [No1] dans la table [AUTRE]...

Exemple:

Requête [PRINCIPALE]:
[No1] [Nom] [Expression] (DSUM([Montant],[AUTRE],[No2]=[No1])
1 Siège social 200$
2 Établissement A -$
3 Établissement B 50$

Table [AUTRE]
[No] [No2] [Montant]
1 3 25$
2 1 100$
3 1 50$
4 3 25$
5 1 50$


Est-ce plus clair?

Merci encore beaucoup de prendre le temps de m'aider.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
28 févr. 2020 à 09:59
tu écris que mes deux suggestions ne fonctionnent pas.
peux-tu être plus précis?
0
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024
28 févr. 2020 à 13:16
En fait, votre première suggestion fonctionne en ce qui a trait à la somme des champs que je recherche, mais la deuxième suggestion ne fonctionne pas puisque le système ne reconnaît pas plus les éléments [PRINCIPALE].[No. 1] dans la formule.

Ce qui ne fonctionne pas, par rapport à mes besoins dans votre première suggestion, est que je perds les enregistrements qui n'ont pas de [Montant] dans la table [AUTRE].
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
28 févr. 2020 à 14:49
je ne comprends pas le soucis avec la deuxième suggestion. peux-tu décrire ce qui se passe, pas seulement expliquer pourquoi cela se passe?
.
suggestion d'adaptation de la première suggestion:
SELECT [PRINCIPALE].No1 , [PRINCIPALE].Nom , sum(AUTRE.Montant)
 FROM [PRINCIPALE] LEFT JOIN AUTRE
ON AUTRE.No2 = [PRINCIPALE].[No1]
GROUP BY [PRINCIPALE].No1 , [PRINCIPALE].Nom;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024
Modifié le 28 févr. 2020 à 18:03
Pour la deuxième suggestion, j'ai simplement un message d'erreur me disant que le système ne reconnaît pas la donnée [PRINCIPALE].[No1].. rien de plus. C'est ce soucis que j'aimerais régler..

Ça me donne l'impression qu'on ne peut pas utiliser les données résultantes d'une requête comme critère dans une fonction DSum().



Votre suggestion d'adaptation de la 1ère suggestion ne fonctionne pas malheureusement..
Je me suis trompée, la fonction Sum() me donne un message d'erreur comme quoi le [No1] ne fait pas partie des expressions spécifiée en tant que partie d'une fonction d'agréation...

C'est donc pourquoi l'autre option qui me vient à l'esprit reste la fonction DSum()..
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
Modifié le 28 févr. 2020 à 18:39
et ainsi?
SELECT [PRINCIPALE].[No1] , [PRINCIPALE].Nom , sum(AUTRE.Montant)
 FROM [PRINCIPALE] LEFT JOIN AUTRE
ON AUTRE.No2 = [PRINCIPALE].[No1]
GROUP BY [PRINCIPALE].[No1] , [PRINCIPALE].Nom;
0
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024
28 févr. 2020 à 19:19
Non toujours pas..

Toujours le même message d'erreur..
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
28 févr. 2020 à 21:47
peux-tu partager ton fichier?
0
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024
28 févr. 2020 à 22:26
Oui, il est assez compliqué par contre, j'espère que vous allez y comprendre quelque chose.. voici mon fichier:

https://drive.google.com/file/d/1wUzzhSTGAnfSn927cpw_VxZFjT7ZP5j6/view?usp=sharing

La requête qui me pose problème porte le nom suivant: [05_01-PLATEFORME]

C'est dans cette requête que je tente d'instaurer la fonction DSum("[NET_DA]" , "[07-DÉPENSES_AUTRES]" , "[07-DÉPENSES_AUTRES].[NoAL_DA]=[05_01-PLATEFORME].[No_AL]).

Merci énormément!
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
28 févr. 2020 à 23:37
j'ai l'impression que tu n'as pas utilisé mes suggestions: où sont-elles dans le fichier?
suggestion:
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])
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) 
ON [03-ÉTABLISSEMENTS].No_ET = [06-ALLOCATIONS_BUDGET].NoET_AL) 
ON [05-MESURES].No_ME = [06-ALLOCATIONS_BUDGET].NoME_AL)
left join 
[07-DÉPENSES_AUTRES]
on 
[07-DÉPENSES_AUTRES].[NoAL_DA]=[08_00-CHOIX_ALLOC_TABLE].No_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
;
0
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024 > yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024
Modifié le 29 févr. 2020 à 15:17
J'ai tenté de mettre ta suggestion dans ma requête à maintes reprises, mais ça ne veut même pas enregistrer à cause que Sum() ne fonctionne pas et ça me donne aussi une erreur dans l'opérateur JOIN. L'as tu essayé de ton côté? Ça fonctionne?
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024
29 févr. 2020 à 22:54
chez moi, cela fonctionne, en effet.
qu'as-tu tenté précisément? "Sum() ne fonctionne pas"?
quel message d'erreur obtiens-tu ? bizarre que tu aies deux erreurs, je trouve.
0
BiankaBo Messages postés 51 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 31 janvier 2024
1 mars 2020 à 15:33
Ouiiiii !!! Problème résolu !!

J'avais surment oublié des caractères lorsque je l'ai écrit l'autre jour!!!

Je suis vraiment contente que vous ayez pu résoudre mon problème!!
Je commençais à perdre espoir!!

Un énorme merci, vous venez de faire une heureuse ce matin, vraiment!!!!
0