Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Kolumna niepoprawna na liście wyboru, ponieważ nie jest zawarta ani w funkcji agregującej, ani w klauzuli GROUP BY

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:

  1. 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
    
  2. Dodanie kolumny do GROUP BY lista

    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
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj instrukcji Create, aby utworzyć tabelę w SQL Server — SQL Server / T-SQL Tutorial, część 34

  2. Analiza wydajności we/wy dla SQL Server

  3. Cały proces przywracania bazy danych SQL Server z wiersza polecenia

  4. Jak sp_describe_first_result_set działa w programie SQL Server

  5. Jak aktywnie gromadzić informacje o fragmentacji indeksów SQL Server