2012-05-29 231 views
0

我一直在嘗試使用Microsoft SQL Server 2008 R2進行查詢,按間隔對點的總數進行分組。但是,我不能讓這個工作。這是我的代碼:對Group By子句使用case語句

SELECT interval_total, COUNT(*) FROM(
SELECT clients.clientId, total.TotalPoints, 
CASE 
    WHEN TotalPuntos >=5000 THEN 5000 
    WHEN TotalPuntos >= 1000 THEN 1000 
    WHEN TotalPuntos >= 500 THEN 500 
    WHEN TotalPuntos >= 100 THEN 100 
    ELSE 0 
END as interval_total 
FROM 
    [TotalSumOfPoints] total, 
    [Client] clients 
WHERE total.clientId = clients.clientId 
AND clients.cardId LIKE '2001%') 
GROUP BY interval_total 

有了這個錯誤:

Msg 156, Level 15, State 1, Line 17 
Incorrect syntax near the keyword 'GROUP'. 

我一直在讀不同的職位,並已得出結論,那就是可以做這樣的查詢,通過將子查詢中的CASE語句(我得出這個結論,閱讀this後)。顯然我做錯了什麼。任何幫助?

回答

4

你的問題就是,你需要爲子查詢提供一個別名,就像這樣:

SELECT interval_total, COUNT(*) FROM(
SELECT clients.clientId, total.TotalPoints, 
CASE 
    WHEN TotalPuntos >=5000 THEN 5000 
    WHEN TotalPuntos >= 1000 THEN 1000 
    WHEN TotalPuntos >= 500 THEN 500 
    WHEN TotalPuntos >= 100 THEN 100 
    ELSE 0 
END as interval_total 
FROM 
    [TotalPuntosPorCuenta] total, 
    [SanRoque].[dbo].[Socio] clients 
WHERE total.clientId = clients.clientId 
AND clients.cardId LIKE '2001%') tbl /* <--- here */ 
GROUP BY interval_total 
+1

我想你也應該clients'後'刪除逗號。 –

+0

是的!試圖簡化查詢將它發佈在這裏,我忘了刪除冒號。非常感謝你!這個簡單的細節使其工作。謝謝! – Soph

+2

爲什麼不改進舊式隱式連接以使用適當的INNER JOIN語法? –