[AC-2007] Somme d'un champ dans une requête SQL

Résolu/Fermé
maylouz Messages postés 34 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 24 juin 2016 - 15 juin 2014 à 13:53
 Tessel75 - 15 juin 2014 à 18:53
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 :

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:

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
1
maylouz Messages postés 34 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 24 juin 2016
15 juin 2014 à 17:52
j'ai crée une 2eme requête ou j'ai mis : id_livrable et la somme des ponderations
et une 3eme requête qui regroupe le tout , avec une jointure des id_livrable

ca marche nickel , merci bcp ;)
0
Tant mieux!
Merci de mettre en "résolue"
0
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
0
maylouz Messages postés 34 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 24 juin 2016
15 juin 2014 à 15:55
Bonjour ,

Voici un extrait de ma base de données.

http://cjoint.com/14jn/DFpp1Brv5EN.htm

merci
0
maylouz Messages postés 34 Date d'inscription mercredi 10 avril 2013 Statut Membre Dernière intervention 24 juin 2016
15 juin 2014 à 16:44
Dans ma requête , dans le champ V_A_PROJET , je divise par ponderation_projet_ac alors que normalement je dois diviser par la somme des pondérations des livrables qui est dans mon cas 31*8 = 248 .

du coup je cherche à calculer la somme de pondération_livrable pour pouvoir l'utiliser aprés.
0