Prd requête sql

Fermé
Tiinooo - Modifié par Tiinooo le 24/05/2011 à 13:33
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 24 mai 2011 à 17:00
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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
24 mai 2011 à 15:19
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 lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 309
24 mai 2011 à 16:34
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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
24 mai 2011 à 17:00
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