Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Impossible d'utiliser un agrégat ou une sous-requête dans une expression utilisée pour la liste group by d'une clause GROUP BY

Sauf si vous incluez T.Client dans votre GROUP BY , vous ne pouvez inclure ce champ que dans une fonction d'agrégation. Dans votre cas, le regroupement par ce champ modifie la logique, donc c'est sorti (et est lié à votre tentative de regroupement par l'instruction CASE). Au lieu de cela, enveloppez T.Client dans une fonction d'agrégation.

De cette façon, vos groupes sont toujours les mêmes, et lorsqu'il n'y a qu'une seule ligne, selon le test de votre instruction CASE, vous savez quel résultat la fonction d'agrégation va donner.

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