Fonction DSum() fesant référence à une donnée de la même requête
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 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:
Sauriez-vous m'aider à résoudre mon problème?
Merci beaucoup! :)
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! :)
A voir également:
- Fonction DSum() fesant référence à une donnée de la même requête
- Fonction si et - Guide
- Reference pto - Accueil - Box & Connexion Internet
- Fonction moyenne excel - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- La base de données de sécurité du serveur n'a pas de compte d'ordinateur pour la relation ✓ - Forum Réseau
9 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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:
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;
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
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! :)
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! :)
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:
et, si tu insistes pour utiliser dsum, peut-être:
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];
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.
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.
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].
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].
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:
.
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;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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()..
Ç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()..
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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;
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!
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!
j'ai l'impression que tu n'as pas utilisé mes suggestions: où sont-elles dans le fichier?
suggestion:
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 ;