2012-05-29 76 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语法? –