Innymi słowy, ten błąd mówi, że SQL Server nie wie, który B
do wybrania z grupy.
Albo chcesz wybrać jedną konkretną wartość (np. MIN
, SUM
lub AVG
), w którym to przypadku użyjesz odpowiedniej funkcji agregującej lub chcesz wybrać każdą wartość jako nowy wiersz (tj. w tym B
w GROUP BY
lista pól).
Weź pod uwagę następujące dane:
ID A B 1 1 13 1 1 79 1 2 13 1 2 13 1 2 42
Zapytanie
SELECT A, COUNT(B) AS T1
FROM T2
GROUP BY A
zwróci:
A T1 1 2 2 3
co jest dobre i dobre.
Należy jednak wziąć pod uwagę następujące (nielegalne) zapytanie, które spowoduje ten błąd:
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A
I zwrócony zestaw danych ilustrujący problem:
A T1 B 1 2 13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...? 2 3 13? 42? ...?
Jednak poniższe dwa zapytania wyjaśniają to i nie spowodują błędu:
-
Korzystanie z agregatu
SELECT A, COUNT(B) AS T1, SUM(B) AS B FROM T2 GROUP BY A
zwróci:
A T1 B 1 2 92 2 3 68
-
Dodanie kolumny do
GROUP BY
listaSELECT A, COUNT(B) AS T1, B FROM T2 GROUP BY A, B
zwróci:
A T1 B 1 1 13 1 1 79 2 2 13 2 1 42