3
votes

Fonction SQL Group By associée à SUM

J'obtiens l'erreur

La colonne "Nordlux UK $ Item.Description" n'est pas valide dans la liste de sélection car il n'est contenu ni dans une fonction d'agrégation ni dans le Clause GROUP BY.

en essayant d'exécuter l'instruction SQL.

Si je supprime la fonction SOMME et Grouper par cela fonctionne, mais j'aimerais que tous les résultats soient regroupés par mon numéro d'article. Quelqu'un peut-il voir ce que j'ai mal fait dans mon code?

SELECT
    [Nordlux UK$Item].No_,
    [Nordlux UK$Item].[Description],
    SUM([Nordlux UK$Item Ledger Entry].[Quantity]) AS Int
FROM [Nordlux UK$Item]
JOIN [Nordlux UK$Sales Price]
    ON [Nordlux UK$Item].[No_] = [Nordlux UK$Sales Price].[Item No_]
JOIN [Nordlux UK$Item Ledger Entry]
    ON [Nordlux UK$Item].[No_] = [Nordlux UK$Item Ledger Entry].[Item No_]
WHERE [Nordlux UK$Sales Price].[Sales Code] = 'DUN02'
GROUP BY [Nordlux UK$Item].No_


3 commentaires

utilisez GROUP BY [Nordlux UK $ Item] .No_, [Nordlux UK $ Item]. [Description] à la fin


En général, vous GROUP BY les mêmes colonnes que vous SELECT, sauf celles qui sont des arguments pour définir des fonctions.


Doublon possible de SQL Server - Colonne "non valide dans la liste de sélection car elle n'est contenue ni dans une fonction d'agrégation ni dans la clause GROUP BY"


3 Réponses :


3
votes

Vous devez ajouter [Nordlux UK $ Item]. [Description] dans la clause group by - car chaque colonne de la liste de sélection à l'exception de la fonction agrégée doit être group by clause

SELECT
    [Nordlux UK$Item].No_,
    [Nordlux UK$Item].[Description],
    SUM([Nordlux UK$Item Ledger Entry].[Quantity]) AS Int
FROM [Nordlux UK$Item]
JOIN [Nordlux UK$Sales Price]
    ON [Nordlux UK$Item].[No_] = [Nordlux UK$Sales Price].[Item No_]
JOIN [Nordlux UK$Item Ledger Entry]
    ON [Nordlux UK$Item].[No_] = [Nordlux UK$Item Ledger Entry].[Item No_]
WHERE [Nordlux UK$Sales Price].[Sales Code] = 'DUN02'
GROUP BY [Nordlux UK$Item].No_, [Nordlux UK$Item].[Description]


0 commentaires

2
votes

Lors de l'utilisation de la fonction d'agrégation dans l'instruction select avec d'autres colonnes, il est courant d'utiliser group by et d'ajouter tous les champs de l'instruction select dans group by à l'exception de la fonction d'agrégation.

Dans votre cas, vous devriez utiliser: GROUP BY [Article Nordlux UK $] .Non_, [Nordlux UK $ Item]. [Description],

Si vous n'utilisez que la fonction d'agrégation dans l'instruction select, il n'est pas nécessaire d'ajouter une clause group by.


0 commentaires

2
votes

Lorsque j'utilise des fonctions d'agrégation, je regroupe toujours toutes les colonnes agrégées (c'est-à-dire celles n'utilisant pas de fonctions d'agrégation telles que SUM, MAX, MIN, COUNT).

SQL n'est pas un langage jeune, il y a peut-être une raison pour laquelle vous voudriez ignorer certaines colonnes agrégées, mais je n'ai jamais rencontré cette situation.


0 commentaires