查询 - 分区条款中的条件求和?

时间:2013-08-29 16:05:00

标签: sql sql-server

假设我在SQL Server中有以下表:

ColA     ColB     ColC
A        1        100
A        0        -100
A        1        -100
A        0        100
A        1        100
A        1        -100
B        1        200
B        1        -200
B        1        200
C        0        300
C        1        -300

我希望实现的目标(用语言表达): Conditional_SumColCColA

ColB = 1中的每个值创建一个新列ColC > 0 = Rownum ColA ColB ColC Conditional_Sum 1 A 1 100 200 (rows 1+5) 2 A 0 -100 200 (rows 1+5) 3 A 1 -100 200 (rows 1+5) 4 A 0 100 200 (rows 1+5) 5 A 1 100 200 (rows 1+5) 6 A 1 -100 200 (rows 1+5) 7 B 1 200 400 (rows 7+9) 8 B 1 -200 400 (rows 7+9) 9 B 1 200 400 (rows 7+9) 10 C 0 300 0 (no rows match) 11 C 1 -300 0 (no rows match) 之和

因此,最终结果将是(在RowNum中添加以显示我如何获得值):

Sum(ColC) Over(Partition By ColA, ColB=1,ColC>0) as Conditional_Sum

所以,我的伪SQL就是:

{{1}}

如何在我的数据集中实现这种结果?

感谢!!!!!!

1 个答案:

答案 0 :(得分:25)

试试这个:

Sum(case when ColB = 1 and ColC > 0 then ColC else 0 end) over(partition by ColA)

我的回答是假设第7行到第9行的条件和应该是400。