带有SUM CASE语句的SQL GROUP BY
我知道有很多这样的问题: 但我试过:带有SUM CASE语句的SQL GROUP BY,sql,sql-server,Sql,Sql Server,我知道有很多这样的问题: 但我试过: with T as (select col1 , SUM(CASE WHEN col2 = 1 THEN col3 ELSE 0 END) AS Totale from tabella group by col1, col2) select col1, Totale from T group by col1, Totale 但是我越来越 col1 | Totale --------------- 1 0 1
with T as (select col1 , SUM(CASE WHEN col2 = 1 THEN col3 ELSE 0 END) AS Totale
from tabella
group by col1, col2)
select col1, Totale
from T
group by col1, Totale
但是我越来越
col1 | Totale
---------------
1 0
1 70
2 0
2 90
而不是:
col1 | Totale
---------------
1 70
2 90
怎么了
更新:
我的缺点是,我尽量保持简单,但我做得太过分了。。我要做的是:
with T as (select col1 , SUM(CASE WHEN col2 = 1 THEN col3 ELSE 0 END) AS TotaleA,
SUM(CASE WHEN col2 = 2 THEN col3 ELSE 0 END) AS TotaleB,
(...)
from tabella
group by col1, col2)
select col1, TotaleA, TotaleB
from T
group by col1, TotaleA, TotaleB
解决方法是在分组中不使用col2。。。我担心“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中”,但它不是。。我可以把一条评论标记为正确答案吗?这里有一个想法。不确定为什么要将其包装在cte中,但为什么不将其简化
select col1
, SUM(col3) AS Totale
from tabella
where col2 = 1
group by col1
您还可以通过使用子查询来解决此问题:
SELECT
col1,
SUM(A) TotalA,
SUM(B) TotalB
FROM
(
select col1,
CASE WHEN col2 = 1 THEN col3 ELSE 0 END A,
CASE WHEN col2 = 2 THEN col3 ELSE 0 END B
from tabella
) t
GROUP BY Col1
您的最终查询将生成代码精确的结果。可能通过在cte内移除组中的col2。没有更多的细节,虽然这只是一个在黑暗中拍摄。