Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Coluna inválida na lista de seleção porque não está contida em uma função agregada ou na cláusula GROUP BY


Em outras palavras, este erro está informando que o SQL Server não sabe qual B para selecionar do grupo.

Ou você deseja selecionar um valor específico (por exemplo, o valor MIN , SUM , ou AVG ) nesse caso você usaria a função de agregação apropriada ou deseja selecionar cada valor como uma nova linha (ou seja, incluindo B no GROUP BY lista de campos).

Considere os seguintes dados:
ID  A   B
1   1  13
1   1  79
1   2  13
1   2  13
1   2  42

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

retornaria:
A  T1
1  2
2  3

que é tudo bem e bom.

No entanto, considere a seguinte consulta (ilegal), que produziria esse erro:
SELECT A, COUNT(B) AS T1, B 
FROM T2 
GROUP BY A

E seu conjunto de dados retornado ilustrando o problema:
A  T1  B
1  2   13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...?
2  3   13? 42? ...?

No entanto, as duas consultas a seguir deixam isso claro e não causarão o erro:

  1. Usando um agregado
    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    

    retornaria:
    A  T1  B
    1  2   92
    2  3   68
    

  2. Adicionando a coluna ao GROUP BY Lista
    SELECT A, COUNT(B) AS T1, B
    FROM T2
    GROUP BY A, B
    

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