sql >> Base de Datos >  >> RDS >> Sqlserver

Columna no válida en la lista de selección porque no está contenida ni en una función agregada ni en la cláusula GROUP BY

En otras palabras, este error le dice que SQL Server no sabe cuál B para seleccionar del grupo.

O desea seleccionar un valor específico (por ejemplo, el MIN , SUM o AVG ) en cuyo caso usaría la función agregada adecuada, o desea seleccionar cada valor como una nueva fila (es decir, incluir B en el GROUP BY lista de campos).

Considere los siguientes datos:

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

La consulta

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

devolvería:

A  T1
1  2
2  3

Esto es bueno y fabuloso.

Sin embargo, considere la siguiente consulta (ilegal), que produciría este error:

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

Y su conjunto de datos devuelto que ilustra el problema:

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

Sin embargo, las siguientes dos consultas aclaran esto y no causarán el error:

  1. Usando un agregado

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

    devolvería:

    A  T1  B
    1  2   92
    2  3   68
    
  2. Agregando la columna al GROUP BY lista

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

    devolvería:

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