倍数条件总和 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'
行的值。
我的目标是生成生成独立总检查的代码。根据以下 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'
行的值。