Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Colonne non valide dans la liste de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY

En d'autres termes, cette erreur vous indique que SQL Server ne sait pas quel B pour sélectionner dans le groupe.

Soit vous souhaitez sélectionner une valeur spécifique (par exemple le MIN , SUM , ou AVG ) auquel cas vous utiliseriez la fonction d'agrégation appropriée, ou vous voudriez sélectionner chaque valeur comme une nouvelle ligne (c'est-à-dire y compris B dans le GROUP BY liste des champs).

Considérez les données suivantes :

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

La requête

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

renverrait :

A  T1
1  2
2  3

ce qui est bien beau.

Cependant, considérez la requête suivante (illégale), qui produirait cette erreur :

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

Et son ensemble de données renvoyé illustrant le problème :

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

Cependant, les deux requêtes suivantes le précisent et ne provoqueront pas l'erreur :

  1. Utiliser un agrégat

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

    renverrait :

    A  T1  B
    1  2   92
    2  3   68
    
  2. Ajout de la colonne au GROUP BY liste

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

    renverrait :

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