Put innymi słowy, błąd ten jest informacją, że SQL Server nie wie któryB
aby wybrać z grupy.
Albo chcesz wybrać jedną wartość konkretnego (np MIN
, SUM
lub AVG
), w którym to przypadku należy użyć odpowiedniej funkcji zbiorczej, lub chcesz wybrać każdą wartość jako nowego wiersza (czyli w tym B
w GROUP BY
lista pól).
Rozważmy następujące dane:
ID A B
1 1 13
1 1 79
1 2 13
1 2 13
1 2 42
zapytaniu
SELECT A, COUNT(B) AS T1
FROM T2
GROUP BY A
wróci:
A T1
1 2
2 3
która jest wszystko dobrze.
jednak rozważyć następujący (nielegalny) kwerendę, która będzie produkować ten błąd:
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A
A jej zwrócone Zestaw danych ilustrujących problem:
A T1 B
1 2 13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...?
2 3 13? 42? ...?
jednak następujące dwa zapytania sprawiają, że jest to jasne i nie spowoduje błędu:
Korzystanie agregat
SELECT A, COUNT(B) AS T1, SUM(B) AS B
FROM T2
GROUP BY A
wróci:
A T1 B
1 2 92
2 3 68
Dodawanie kolumny do listy GROUP BY
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A, B
wróci:
A T1 B
1 1 13
1 1 79
2 2 13
2 1 42
możliwy duplikat [Klauzuli grupowej powodującej błąd] (http://stackoverflow.com/questions/16314836/group-by-clause-causing-error). Jeśli szukałeś tutaj w swoim komunikacie o błędzie, znajdziesz tu wiele dopasowań, które by Ci odpowiedziały. Proszę przynajmniej włożyć wysiłek w to, a także faktycznie * odczytać * komunikat o błędzie, który nie tylko opisuje dokładny problem, ale również dokładnie określa, która kolumna go powoduje. –
Możliwy duplikat [Przyczyna kolumny jest nieprawidłowa na liście wyboru, ponieważ nie jest zawarta ani w funkcji agregującej, ani klauzuli GROUP BY] (http://stackoverflow.com/questions/13999817/reason-for-column-is -nieważne-na-liście-wyboru-ponieważ-to-nie-zawarte-w-e) – blo0p3r