Comment puis-je calculer la somme d'un groupe de sommes? SQL Server 2008
J'ai une requête avec un sum
dans comme ceci:
SELECT
Table1.ID, SUM(Table2.[Number1] + Table2.[Number2]) AS SumColumn
FROM Table1 INNER JOIN
Table3 ON Table1.ID = Table3.ID
INNER JOIN
Table2 ON Table3.ID = Table2.ID
WHERE (Table2.[Something] = 'Whatever')
GROUP BY Table1.ID, Table2.[Number1] , Table2.[Number2]
et il me donne un tableau comme ceci:
ID SumColumn
67 1
67 4
70 2
70 6
70 3
70 6
80 5
97 1
97 3
Comment puis-je faire il me donner un tableau comme celui-ci, où le SumColumn est résumé, regroupés par la colonne ID?
ID SumColumn
67 5
70 17
80 5
97 4
Je ne GROUP BY
SumColumn parce que je reçois un message d'erreur (nom de colonne non Valide 'SumColumn'.) COALESCE
ne fonctionne pas non plus. Merci à l'avance.
EDIT:
Juste groupement par l'ID me donne une erreur:
[Nombre1, Nombre2, et les autres noms de colonnes que je suis en sélectionnant] n'est pas valide dans la liste de sélection, car il n'est pas contenue dans une fonction d'agrégation ou de la clause GROUP BY.
EDIT 2
Aucune idée de pourquoi, mais juste de regroupement par Table.ID maintenant semble fonctionner. Merci à tous qui a posté la bonne réponse, je souhaite que je pourrais cocher tous!
SELECT Table1.ID ....GROUP BY Table1.Att1
devrait donner une erreur que vous ne pouvez pas sélectionner ID
comme il n'est pas dans le GROUP BY
ou une fonction d'agrégation Sont - ils à la fois la même colonne et vous avez oublié de changer dans votre exemple?Ouais, désolé. Mauvaise édition!
RE: Vos derniers modifier cette erreur est explicite n'est-ce pas?
SUM(Number1 + Number2)
est OK. Number1, Number2
ne l'est pas.Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause.
OriginalL'auteur Speed | 2011-03-08
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé:
Je ne vois pas pourquoi le ci-dessus ne fonctionnerait pas, sauf si vous êtes pas d'aliasing tables de façon appropriée dans la requête, qui est plus d'une syntaxe de la logique de l'erreur, mais "mal", à partir du moteur SQL de point de vue, peu importe. Chaque fois que le code SQL ne fonctionne pas pour moi, je simplifie ad nauseam ma requête jusqu'à ce que la raison de l'échec devient apparente. Dans cette veine, je vais l'essayer:
... et je voudrais permettre à toutes les erreurs que l'on peut voir à partir de la suite (et la requête imbriquée!) pour informer mon complément d'enquête.
yup de voir les nouveaux et l'amélioration de la réponse 🙂
Je n'ai aucune idée de ce qui s'était passé. J'ai commencé à simplifier comme vous l'avez dit en prenant l'intérieure de la clause SELECT pour voir si cela a fonctionné, mais a ajouté le GROUPE. Donc exactement comme vous l'avez dit dans votre premier exemple. Il fonctionne! Rien de ce que je peux voir, c'est différent de quand j'ai obtenu l'erreur, mais merci beaucoup de toute façon. Pour quelqu'un d'autre cette lecture, je n'ai pas besoin de le SELECT imbriqué à tous et tout le monde qui a publié initialement étaient correctes.
ne peux pas vous dire combien de fois "parfaitement bien" SQL ne fonctionne pas, mais en ajustant le code progressivement comme un détective finit par faire le travail!
OriginalL'auteur drapkin11
Cela sonne comme vous avez besoin de groupe par juste Table1.ID de la place.
Depuis SUM() est une fonction d'agrégation, elle prendra en charge le regroupement de numéros, il vous suffit de spécifier la façon de regrouper les autres colonnes que vous souhaitez.
[Mise à JOUR]
Le Code De Démonstration:
Hmm, cela a fonctionné pour moi. J'ai essayé de dupliquer l'erreur, mais n'a pas pu. Voir mon exemple ci-dessus.
OriginalL'auteur Brosto
Essayer ce?
OriginalL'auteur Keith
Avez-vous essayé de faire un select imbriqué?
OriginalL'auteur jswolf19