倍数条件总和 SQL

Multiples Conditions Sum SQL

我的目标是生成生成独立总检查的代码。根据以下 table:

column1   Column2   Column3   value   independent total check
A         B         C         10      Null                   
A         B         E         11      Null                   
A         B         total     21      21                    
x         y         z         10      Null                   
x         y         p         20      Null                   
x         y         total     30      30                    

我正在尝试使用条件总和,但没有成功!我现在拥有的是:

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL DROP Table #Temp
select  t2.Column1, t2.Column2, t2.Column3,t2.value, independanttotal = 
case 
when t2.Column1 ='A' and t2.Column2= 'B'and t2.T_subdesk = 'Total' then sum(t2.value) 
when t2.Column1 ='x' and t2.Column2= 'y'and t2.T_subdesk = 'Total' then sum(t2.value) 
end
into #Temp 
from #Temp_A t2
group by t2.Column1,t2.Column2,t2.Column3,t2.value

但这显然是不正确的,尽管它产生了正确的结果,实际上我只是在重现总值。我需要某种嵌套总和吗?我需要把它分成不同的 table 吗?这真让我沮丧 提前感谢您的帮助!

你似乎想要:

select t.*,
       sum(case when column3 <> 'total' then value end) over (partition by column1, column2) as independent_total
from #temp t;

这将对所有行进行计算。我认为这不是问题,但如果这确实是个问题,您可以在 sum() 之外使用 case 表达式。

如果您只想在 "total" 行中使用它,您可以这样做:

select t.*,
       (case when column3 = 'total'
             then sum(case when column3 <> 'total' then value end) over (partition by column1, column2)
        end) as independent_total
from #temp t;

或者,你稍微简化一下逻辑:

select t.*,
       (case when column3 = 'total'
             then sum(value) over (partition by column1, column2) - value
        end) as independent_total
from #temp t;

这会得到两列的总和,然后减去 'total' 行的值。