Put mit anderen Worten, dieser Fehler Sie, dass SQL Server sagt nicht kennt dieB
aus der Gruppe auszuwählen.
Entweder wollen Sie einen bestimmten Wert wählen (zB der MIN
, SUM
oder AVG
), in dem Fall, dass Sie die entsprechende Aggregatfunktion verwenden würden, oder wollen Sie jeden Wert als neue Zeile wählen (dh einschließlich B
in der GROUP BY
Feldliste).
Betrachten Sie die folgende Daten:
ID A B
1 1 13
1 1 79
1 2 13
1 2 13
1 2 42
Die Abfrage
SELECT A, COUNT(B) AS T1
FROM T2
GROUP BY A
zurückkehren würde:
A T1
1 2
2 3
, die alles schön und gut ist.
betrachten jedoch die folgende (illegalen) Abfrage, die diesen Fehler erzeugen würde:
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A
Und seine zurück Datensatz illustriert das Problem:
A T1 B
1 2 13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...?
2 3 13? 42? ...?
jedoch die folgenden zwei Abfragen machen dies klar und verursachen den Fehler nicht:
Mit ein Aggregat
SELECT A, COUNT(B) AS T1, SUM(B) AS B
FROM T2
GROUP BY A
zurückkehren würde:
A T1 B
1 2 92
2 3 68
die Spalte auf der Liste GROUP BY
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A, B
zurückkehren würde hinzufügen:
A T1 B
1 1 13
1 1 79
2 2 13
2 1 42
mögliches Duplikat von [Group By-Klausel verursacht Fehler] (http://stackoverflow.com/questions/16314836/group-by-clause-causing-error). Wenn Sie hier auf Ihrer Fehlermeldung gesucht haben, finden Sie hier viele Übereinstimmungen, die dies für Sie beantwortet hätten. Machen Sie sich zumindest die Mühe, die Fehlermeldung zu lesen, die nicht nur das genaue Problem beschreibt, sondern Ihnen auch genau sagt, welche Spalte sie verursacht. –
Mögliches Duplikat von [Grund für Spalte ist in der Auswahlliste ungültig, da es weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist] (http://stackoverflow.com/questions/13999817/reason-for-column-is) -invalid-in-the-Select-Liste-weil-es-ist-nicht-enthalten-in-e) – blo0p3r