2012-03-26 141 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

相關問題