Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对GROUPBY子句使用case语句_Sql_Sql Server 2008_Group By_Case - Fatal编程技术网

Sql 对GROUPBY子句使用case语句

Sql 对GROUPBY子句使用case语句,sql,sql-server-2008,group-by,case,Sql,Sql Server 2008,Group By,Case,我一直在尝试使用MicrosoftSQLServer2008R2进行查询,按时间间隔对总分进行分组。然而,我不能让它工作。这是我的代码: SELECT interval_total, COUNT(*) FROM( SELECT clients.clientId, total.TotalPoints, CASE WHEN TotalPuntos >=5000 THEN 5000 WHEN TotalPuntos >= 1000 THEN 1000 WHEN To

我一直在尝试使用MicrosoftSQLServer2008R2进行查询,按时间间隔对总分进行分组。然而,我不能让它工作。这是我的代码:

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语句放在子查询中,我得出了可以进行这种查询的结论。很明显我做错了什么。有什么帮助吗?

您的问题只是需要为子查询提供别名,如下所示:

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

您的问题只是需要为子查询提供别名,如下所示:

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

我想你也应该删除客户端后面的逗号。是的!为了简化que查询并将其发布到这里,我忘了删除冒号。非常感谢你!这个简单的细节使它起了作用。谢谢为什么不改进老式的隐式连接以使用正确的内部连接语法呢?我想你也应该删除客户端后面的逗号。是的!为了简化que查询并将其发布到这里,我忘了删除冒号。非常感谢你!这个简单的细节使它起了作用。谢谢为什么不改进旧式隐式连接以使用正确的内部连接语法?