web-dev-qa-db-fra.com

MS-Access - vous avez essayé d'exécuter une requête qui n'inclut pas la fonction d'agrégat spécifiée

SELECT SUM(orders.quantity) AS num, fName, surname
FROM author
INNER JOIN book ON author.aID = book.authorID;

Je continue à recevoir le message d'erreur suivant: "vous avez essayé d'exécuter une requête qui n'inclut pas l'expression spécifiée" fName "dans le cadre d'une fonction d'agrégation.

15
blahblahvvvvv

L'erreur est due au fait que fName est inclus dans la liste SELECT, mais n'est pas inclus dans une clause GROUP BY et ne fait pas partie d'une fonction d'agrégation (Count(), Min(), Max(), Sum(), etc.).

Vous pouvez résoudre ce problème en incluant fName dans un GROUP BY. Mais alors vous ferez face au même problème avec surname. Alors mettez les deux dans le GROUP BY:

SELECT
    fName,
    surname,
    Count(*) AS num_rows
FROM
    author
    INNER JOIN book
    ON author.aID = book.authorID;
GROUP BY
    fName,
    surname

Notez que j'ai utilisé Count(*) où vous vouliez SUM(orders.quantity). Cependant, orders n'est pas inclus dans la section FROM de votre requête. Vous devez donc l'inclure avant de pouvoir Sum() l'un de ses champs.

Si Access est disponible, créez la requête dans le concepteur de requête. Cela peut vous aider à comprendre quelles fonctionnalités sont possibles et à appliquer la syntaxe correcte pour Access SQL.

23
HansUp

J'ai eu un problème similaire dans une requête MS-Access, et je l'ai résolu en changeant mon équivalent fName en "Expression" (par opposition à "Group By" ou "Sum"). Tant que tous mes champs étaient "Expression", le générateur de requête Access n'avait pas besoin de clause Group By à la fin.enter image description here

4
LeftyMaus

GROUP BY peut être sélectionné à partir de la ligne Total en mode création de requête dans MS Access.
Si la ligne Total n’est pas affichée en mode Création (comme dans mon cas). Vous pouvez accéder à la vue SQL et ajouter GROUP par fname, etc. La ligne Total s'affiche automatiquement en mode Création.
Vous devez sélectionner comme expression dans cette ligne pour les champs calculés.

0
saleem kalro