我的目标是生成生成独立总检查的代码。如下表所示:
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
但这显然是不正确的,虽然它产生了正确的结果实际上我只是复制了总价值。我需要某种嵌套的总和吗?我是否需要将其分成不同的表格?这真让我很沮丧 感谢您的帮助!
答案 0 :(得分:2)
你似乎想要:
select t.*,
sum(case when column3 <> 'total' then value end) over (partition by column1, column2) as independent_total
from #temp t;
这将计算放在所有行上。我不认为这是一个问题,但如果确实存在问题,您可以在case
之外使用sum()
表达式。
如果您只想在&#34;总计&#34;你可以这样做:
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'
行的值。