[AC-2007] Somme d'un champ dans une requête SQL
Résolu
maylouz
Messages postés
34
Date d'inscription
Statut
Membre
Dernière intervention
-
Tessel75 -
Tessel75 -
Bonjour à tous ,
Je possède une requête qui est basé sur plusieurs tables liées , parmi les champs de la requête , il y a le champ " Pondérations livrables" qui est de type Numérique. j'ai crée un nouveau champ pour avoir la Somme du champ "Ponderations_livrable". (Somme([Ponderations_Livrable]).
Dans mon exemple je possède 8 enregistrement avec comme ponderations : '31' pour tous.
Donc je souhaite obtenir dans un autre champ la somme de ces pondérations qui est de 248 , de sorte que je puisse calculer ce que représente un enregistrement pour tout le projet : c'est a dire (31 * 100) / 248 = 12,5 %
mon problème c'est que quand j'exécute la requête , j'ai un message d'erreur :
Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée < id_livrable > comme une partie de la fonction d'agrégat.
du coup , je n'arrive pas à avoir la somme de mon champ "pondérations_livrable".
Si quelqu'un a une une solution à mon problème s'il vous plait , que ca soit en Requete QBE , SQL ou en VBA , peu importe .
un imprime écran de ma requête et du message d'erreur :
http://cjoint.com/14jn/DFpnSOeSrQ7.htm
http://cjoint.com/14jn/DFpnTVCuyx9.htm
et le code de ma requête :
Je vous remercie d'avance.
Cordialement.
Je possède une requête qui est basé sur plusieurs tables liées , parmi les champs de la requête , il y a le champ " Pondérations livrables" qui est de type Numérique. j'ai crée un nouveau champ pour avoir la Somme du champ "Ponderations_livrable". (Somme([Ponderations_Livrable]).
Dans mon exemple je possède 8 enregistrement avec comme ponderations : '31' pour tous.
Donc je souhaite obtenir dans un autre champ la somme de ces pondérations qui est de 248 , de sorte que je puisse calculer ce que représente un enregistrement pour tout le projet : c'est a dire (31 * 100) / 248 = 12,5 %
mon problème c'est que quand j'exécute la requête , j'ai un message d'erreur :
Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée < id_livrable > comme une partie de la fonction d'agrégat.
du coup , je n'arrive pas à avoir la somme de mon champ "pondérations_livrable".
Si quelqu'un a une une solution à mon problème s'il vous plait , que ca soit en Requete QBE , SQL ou en VBA , peu importe .
un imprime écran de ma requête et du message d'erreur :
http://cjoint.com/14jn/DFpnSOeSrQ7.htm
http://cjoint.com/14jn/DFpnTVCuyx9.htm
et le code de ma requête :
SELECT AVANCEMENT.ID_LIVRABLE, AVANCEMENT.DATE_ENVOI_REF, AVANCEMENT.DATE_ENVOI_PREV, AVANCEMENT.DATE_ENVOI_REAL, LIVRABLES.PONDERATION_LIVRABLE, AVANCEMENT.ID_ETAT, AVANCEMENT.Valeur_ETAT, Iif([date_envoi_real], [valeur_etat], "") AS av_physique, ( [av_physique] / 100 ) * [LIVRABLES] ! [Ponderation_livrable_AC] AS V_A, PROJET.Ponderation_projet_REF, PROJET.Ponderation_Projet_AC, ( [V_A] * 100 ) / ( [projet] ! [ponderation_projet_ac] ) AS V_A_PROJET, (Somme([Ponderations_Livrable]) AS somme_que_je_recherche FROM PROJET INNER JOIN (LIVRABLES INNER JOIN AVANCEMENT ON LIVRABLES.ID_LIVRABLE = AVANCEMENT.ID_LIVRABLE) ON PROJET.ID_PROJET = LIVRABLES.ID_PROJET WHERE (( ( AVANCEMENT.ID_LIVRABLE ) = "a500" ));
Je vous remercie d'avance.
Cordialement.
A voir également:
- [AC-2007] Somme d'un champ dans une requête SQL
- Save as pdf office 2007 - Télécharger - Bureautique
- Formule somme excel colonne - Guide
- Somme si couleur - Guide
- Comment supprimer une page sur word 2007 - Guide
- Somme en anglais excel - Guide
4 réponses
Re-B...
Base bien reçue! Mais pas sûr du tout de bien comprendre ce que tu veux obtenir. Merci de spécifier .
Mais si j'ai compris qqch, il faut que tu fasses une première requête qui calcule le cumul des pondérations ( Somme(...Ponderation...)) et qu'ensuite tu l'utilises avec les jointures nécessaires pour appliquer la formule finale. Access et SQL travaillent très bien avec des requêtes en cascade; elles sont alors utilisées comme des tables.
A plus...., Je m'absente qq heures.
Bonne suite
Base bien reçue! Mais pas sûr du tout de bien comprendre ce que tu veux obtenir. Merci de spécifier .
Mais si j'ai compris qqch, il faut que tu fasses une première requête qui calcule le cumul des pondérations ( Somme(...Ponderation...)) et qu'ensuite tu l'utilises avec les jointures nécessaires pour appliquer la formule finale. Access et SQL travaillent très bien avec des requêtes en cascade; elles sont alors utilisées comme des tables.
A plus...., Je m'absente qq heures.
Bonne suite
Bonjour,
Désolé, je n'ai pas du tout l'habitude de travailler directement en SQL, je travaille toujours en"visuel" aussi j'aurais du mal à te dire clairement les corrections à apporter. Pour autant je peux interpréter le message.
Lorsque tu fais une requête calculée de ce type, il faut TOUJOURS indiquer les regroupements que tu fais dans tes calculs, soit par une indication de regroupement simple (regroupement, en SQL "group by") soit par d'autres types, "premier, dernier, max, min, etc ", ou alors les sortir de la sélection finale avec un simple "Où, where", mais alors ils n'apparaitront plus dans le résultat de ta requête.
Dans ton cas, tu as ce message parce que tu n'indiques pas le regroupement que tu veux pour le champ "AVANCEMENT.ID_LIVRABLE". Mais autant que tu saches tout de suite que la requête bloque sur ce champ parce qu'il est le premier de ta liste, parce qu'aussi il y a tous les autres derrière; càd que les suivants ne passeront pas mieux quand tu auras trouver la solution pour les premiers; ils bloqueront tous un par un. Il faut donc que tu règles d'emblée tous les champs.
Si tu mettais un bout de base avec un extrait de tables avec la requête correspondante sur Cjoint.com, je pourrais t'apporter les corrections plus facilement. Là j'ai fait au mieux pour te répondre.
Bonne suite
Désolé, je n'ai pas du tout l'habitude de travailler directement en SQL, je travaille toujours en"visuel" aussi j'aurais du mal à te dire clairement les corrections à apporter. Pour autant je peux interpréter le message.
Lorsque tu fais une requête calculée de ce type, il faut TOUJOURS indiquer les regroupements que tu fais dans tes calculs, soit par une indication de regroupement simple (regroupement, en SQL "group by") soit par d'autres types, "premier, dernier, max, min, etc ", ou alors les sortir de la sélection finale avec un simple "Où, where", mais alors ils n'apparaitront plus dans le résultat de ta requête.
Dans ton cas, tu as ce message parce que tu n'indiques pas le regroupement que tu veux pour le champ "AVANCEMENT.ID_LIVRABLE". Mais autant que tu saches tout de suite que la requête bloque sur ce champ parce qu'il est le premier de ta liste, parce qu'aussi il y a tous les autres derrière; càd que les suivants ne passeront pas mieux quand tu auras trouver la solution pour les premiers; ils bloqueront tous un par un. Il faut donc que tu règles d'emblée tous les champs.
Si tu mettais un bout de base avec un extrait de tables avec la requête correspondante sur Cjoint.com, je pourrais t'apporter les corrections plus facilement. Là j'ai fait au mieux pour te répondre.
Bonne suite
et une 3eme requête qui regroupe le tout , avec une jointure des id_livrable
ca marche nickel , merci bcp ;)
Merci de mettre en "résolue"