Innymi słowy, ten błąd mówi ci, że SQL Server nie wie, który B
wybrać z grupy.
Albo chcesz wybrać jedną konkretną wartość (np. MIN
, SUM
Lub AVG
), w którym to przypadku użyjesz odpowiedniej funkcji agregującej, albo chcesz wybrać każdą wartość jako nowy wiersz (tj. Uwzględniać B
na GROUP BY
liście pól).
Weź pod uwagę następujące dane:
ID AB
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.
Jednak weź pod uwagę następujące (niedozwolone) zapytanie, które spowodowałoby 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? Zarówno 13, jak i 79 w oddzielnych wierszach? (13 + 79 = 92)? ...?
2 3 13? 42? ...?
Jednak poniższe dwa zapytania wyjaśniają to jasno 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
listy
SELECT 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