Prd requête sql

Tiinooo -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

A la fin de l'année de je vais passer mon BAC de marketing et pour mon projet j'ai fait une table sous access avec plusieurs Requête mais une d'entre elle ne marche pas, Voici ma requête :
SELECT CLIENT.NumClient, Sum(Prix*Quantite) AS CA_Client, CLIENT.Nom, CLIENT.Prénom, CLIENT.Addresse, CLIENT.Code_postal
FROM PRODUITS INNER JOIN ((CLIENT INNER JOIN FACTURE ON CLIENT.NumClient = FACTURE.NumClient) INNER JOIN COMPONANT ON FACTURE.RefFact = COMPONANT.RefFact) ON PRODUITS.RefPdt = COMPONANT.RefPdt
WHERE (((FACTURE.RefFact)=[COMPONANT].[RefFact]) AND ((PRODUITS.RefPdt)=[COMPONANT].[RefPdt]))
GROUP BY CLIENT.NumClient;

Et le message d'erreur :
Vous avez essayé d'executer une requête ne comprenant pas l'expression spécifiée 'Nom' comme une partie de la fonction d'agrégat.

Lorsque j'enleve CLIENT.Nom, CLIENT.Prénom, CLIENT.Addresse, CLIENT.Code_postal
la requête marche mais j'ai absolument besoin de ces champs afin de la combiner avec un publipostage sous word.

Sous Access 2003

2 réponses

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Alors, je suis surpris de la syntaxe
INNER JOIN ((CLIENT INNER JOIN FACTURE ON CLIENT.NumClient = FACTURE.NumClient)
.
Mais je ne connais pas trop Access, donc, admettons.

Par contre, le message d'erreur indique qu'il attend que les champs CLIENT.Nom et CLIENT.Prénom soient inclus à ta clause GROUP BY.

Donc ta requête deviendrait :
SELECT CLIENT.NumClient, Sum(Prix*Quantite) AS CA_Client, CLIENT.Nom, CLIENT.Prénom, CLIENT.Addresse, CLIENT.Code_postal
FROM PRODUITS INNER JOIN ((CLIENT INNER JOIN FACTURE ON CLIENT.NumClient = FACTURE.NumClient) INNER JOIN COMPONANT ON FACTURE.RefFact = COMPONANT.RefFact) ON PRODUITS.RefPdt = COMPONANT.RefPdt
WHERE (((FACTURE.RefFact)=[COMPONANT].[RefFact]) AND ((PRODUITS.RefPdt)=[COMPONANT].[RefPdt]))
GROUP BY CLIENT.NumClient, CLIENT.Nom, CLIENT.Prénom, CLIENT.Addresse, CLIENT.Code_postal; 
0
chossette9 Messages postés 4239 Date d'inscription   Statut Contributeur Dernière intervention   1 311
 
Bonjour,

de façon général, que ce soit en Accès, SQL, MySQL, Oracle... quand on fait une requête de sélection avec un agrégat (somme, moyenne, maximum, minimum...), TOUS les champs qui ne comportent pas d'agrégat doivent être présents dans la clause GROUP BY. Donc ta clause GROUP BY doit contenur le numéro de client, le nom, le prénom, l'adresse et le code postal, comme l'indique Reivax962.

Cordialement.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Pour info, ce n'est pas forcément vrai sur MySQL par exemple.
Mais cela pose plus de problèmes que cela n'en résout, et, on est bien d'accord, on a tout intérêt à rester rigoureux sur ce point.
0