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

Impossibile utilizzare un'aggregazione o una sottoquery in un'espressione utilizzata per l'elenco group by di una clausola GROUP BY

A meno che tu non includa T.Client nel tuo GROUP BY , puoi includere quel campo solo all'interno di una funzione di aggregazione. Nel tuo caso, il raggruppamento per quel campo cambia la logica, quindi è fuori (ed è correlato al tuo tentativo di raggruppare in base all'istruzione CASE). Invece, avvolgi T.Client in una funzione aggregata.

In questo modo i tuoi gruppi sono sempre gli stessi e quando c'è solo una riga, come per il test della tua istruzione CASE, sai quale risultato darà la funzione aggregata.

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