相关文章推荐
咆哮的勺子  ·  python ...·  1 年前    · 

在用于GROUP BY子句的group by list的表达式中不能使用聚合或子查询。

9 人关注

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

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

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

SELECT
    T.Post,
    COUNT(*) AS ClientCount,
    Client = CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END
    MyTable T
GROUP BY
    T.Post,
    CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END
sql
sql-server
sql-server-2008
AzaRoth91
AzaRoth91
发布于 2012-03-26
2 个回答
MatBailie
MatBailie
发布于 2012-03-26
已采纳
0 人赞同

除非你在 GROUP BY 中包含 T.Client ,否则你只能在一个聚合函数中包含该字段。 在你的例子中,按该字段分组改变了逻辑,所以这是不可能的(这与你试图按CASE语句分组有关)。 相反,将 T.Client 包在一个聚合函数中。

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

SELECT
  T.Post,
  ClientCount = COUNT(*) AS ClientCount,
  Client      = CASE COUNT(*) WHEN 1 THEN MAX(T.Client) ELSE '[Clients]' END
  MyTable T
GROUP BY
  T.Post
Tomalak
Tomalak
发布于 2012-03-26
0 人赞同

你不需要按该CASE表达式分组。

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