Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
带有SUM CASE语句的SQL GROUP BY_Sql_Sql Server - Fatal编程技术网

带有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。没有更多的细节,虽然这只是一个在黑暗中拍摄。