Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ein Aggregat oder eine Unterabfrage kann nicht in einem Ausdruck verwendet werden, der für die Gruppieren-nach-Liste einer GROUP BY-Klausel verwendet wird

Es sei denn, Sie fügen T.Client hinzu in Ihrem GROUP BY , können Sie dieses Feld nur in eine Aggregatfunktion einschließen. In Ihrem Fall ändert die Gruppierung nach diesem Feld die Logik, das ist also aus (und hängt mit Ihrem Versuch zusammen, nach der CASE-Anweisung zu gruppieren). Umschließen Sie stattdessen T.Client in einer Aggregatfunktion.

Auf diese Weise sind Ihre Gruppen immer noch dieselben, und wenn es gemäß dem Test Ihrer CASE-Anweisung nur eine Zeile gibt, wissen Sie, welches Ergebnis die Aggregatfunktion geben wird.

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