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

Joh*_*tos 9 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
Run Code Online (Sandbox Code Playgroud)

而我想要实现的目标(用语言)是: 创建一个新列,Conditional_Sum= ColCColA哪里ColB = 1和每个值的总和ColC > 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)
Run Code Online (Sandbox Code Playgroud)

所以,我的伪SQL就是:

Sum(ColC) Over(Partition By ColA, ColB=1,ColC>0) as Conditional_Sum
Run Code Online (Sandbox Code Playgroud)

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

谢谢!!!!!!

Dan*_*rth 29

试试这个:

Sum(case when ColB = 1 and ColC > 0 then ColC else 0 end) over(partition by ColA)
Run Code Online (Sandbox Code Playgroud)

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

  • OMG - 那是**真棒** - 正是我想要的!!还不能接受答案,但我会尽快!- **谢谢你!!** (2认同)