无法在GROUP BY子句列表中使用的表达式中使用聚合或子查询

时间:2012-03-26 14:06:46

标签: sql sql-server sql-server-2008

在下面的sql语句中,我收到以下错误

  

不能在用于表达式的表达式中使用聚合或子查询   按GROUP BY子句列表分组。

我怎样才能解决这个问题?

SELECT
    T.Post,
    COUNT(*) AS ClientCount,
    Client = CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END
FROM
    MyTable T
GROUP BY
    T.Post,
    CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END

2 个答案:

答案 0 :(得分:11)

除非您在T.Client中加入GROUP BY,否则您只能在聚合函数中包含该字段。在您的情况下,按该字段进行分组会更改逻辑,从而导出(并且与您尝试按CASE语句进行分组有关)。而是将T.Client包装在聚合函数中。

这样你的组仍然是相同的,当只有一行时,根据你的CASE语句的测试,你知道聚合函数将给出的结果。

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

答案 1 :(得分:2)

您无需按该CASE表达式进行分组。

SELECT
    T.Post,
    COUNT(*) AS ClientCount,
    CASE COUNT(*) WHEN '1' THEN MIN(T.Client) ELSE '[Clients]' END Client
FROM
    MyTable T
GROUP BY
    T.Post