2012-03-26 99 views

回答

10

除非您在您的GROUP BYT.Client,你只能包括一个聚合函数内场。在你的情况下,按该字段进行分组会改变逻辑,所以这是不可能的(并且与你试图用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 
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 
+0

我非常确定对'T.Client'的引用在这里不会有效,因为它不是分组的一部分。他可能需要通过相关的子查询来定义该列。 – 2012-03-26 14:13:39

+0

@丹尼尔你说得对。我没有注意那部分。固定。 – Tomalak 2012-03-26 14:14:47

相关问题