14

假设我在 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

而我想要实现的(用文字)将是: 创建一个新列, = where和的每个值的Conditional_Sum总和ColCColAColB = 1ColC > 0

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

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)

因此,我的伪 SQL 将是:

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

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

谢谢!!!!!!

4

1 回答 1

44

尝试这个:

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

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

于 2013-08-29T16:07:04.170 回答