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

Não é possível usar um agregado ou uma subconsulta em uma expressão usada para o grupo por lista de uma cláusula GROUP BY


A menos que você inclua T.Client em seu GROUP BY , você só pode incluir esse campo em uma função agregada. No seu caso, agrupar por esse campo altera a lógica, então isso está fora (e está relacionado à sua tentativa de agrupar pela instrução CASE). Em vez disso, envolva T.Client em uma função agregada.

Desta forma, seus grupos ainda são os mesmos, e quando há apenas uma linha, conforme o teste da sua instrução CASE, você sabe qual resultado a função agregada fornecerá.
SELECT
  T.Post,
  ClientCount = COUNT(*) AS ClientCount,
  Client      = CASE COUNT(*) WHEN 1 THEN MAX(T.Client) ELSE '[Clients]' END
FROM
  MyTable T
GROUP BY
  T.Post