Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Colonna non valida nell'elenco di selezione perché non è contenuta né in una funzione di aggregazione né nella clausola GROUP BY

In altre parole, questo errore ti dice che SQL Server non sa quale B per selezionare dal gruppo.

O vuoi selezionare un valore specifico (ad es. il MIN , SUM o AVG ) nel qual caso utilizzeresti la funzione di aggregazione appropriata, oppure desideri selezionare ogni valore come una nuova riga (cioè includendo B nel GROUP BY elenco campi).

Considera i seguenti dati:

ID  A   B
1   1  13
1   1  79
1   2  13
1   2  13
1   2  42

La domanda

SELECT A, COUNT(B) AS T1 
FROM T2 
GROUP BY A

ritornerebbe:

A  T1
1  2
2  3

che va tutto bene.

Tuttavia, considera la seguente query (illegale), che produrrebbe questo errore:

SELECT A, COUNT(B) AS T1, B 
FROM T2 
GROUP BY A

E il suo set di dati restituito che illustra il problema:

A  T1  B
1  2   13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...?
2  3   13? 42? ...?

Tuttavia, le due query seguenti lo chiariscono e non causeranno l'errore:

  1. Utilizzando un aggregato

    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    

    ritornerebbe:

    A  T1  B
    1  2   92
    2  3   68
    
  2. Aggiunta della colonna al GROUP BY elenco

    SELECT A, COUNT(B) AS T1, B
    FROM T2
    GROUP BY A, B
    

    ritornerebbe:

    A  T1  B
    1  1   13
    1  1   79
    2  2   13
    2  1   42