有没有一种方法可以查看case表达式中的上一个计算结果?

kx7yvsdv  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(243)

我在excel中创建了下表作为示例。我想在SQLServer中对一个外观相似的表执行类似的表达式(如excel中显示的公式)。列row_num和switch已经基于前面的创建 CASE 声明。
单击查看excel工作表
有没有办法做到这一点?
谢谢你看!
ps:如果图像不工作:

EXCEL     |   A    |    B   |   C   | 
1         |row_num | switch | group |
2         | 1      | 0      | 1     |
3         | 2      | 1      | 1     |
4         | 3      | 1      | 1     |
5         | 4      | 0      | 2     |
6         | 5      | 0      | 3     |
7         | 6      | 1      | 3     |
8         | 7      | 1      | 3     |
9         | 8      | 0      | 4     |
10        | 1      | 0      | 5     |
11        | 2      | 1      | 5     |
12        | 3      | 0      | 6     |
13        | 4      | 1      | 6     |

Formula on cell C3: IF(B3=1;C2;C2+1) (etc)
yqyhoc1h

yqyhoc1h1#

你想要一个案例的累计总和 switch = 0 .
但是,sql表表示无序集。因此需要一列(或多列)来指定顺序。在您的示例中,可以使用excel行号,但您的数据可能有更合适的列。
因此:

select t.*,
       sum(case when switch = 0 then 1 else 0 end) over (order by excel_row) as grouping
from t;

如果 switch 只有两个值,您可以将其简化为:

select t.*,
       sum(1 - switch) over (order by excel_row) as grouping
from t;
gopyfrb3

gopyfrb32#

我认为窗口总和可以满足你的要求:

select
    t.*,
    sum(case when switch = 0 then 1 else 0 end) over(order by excel_row) grp
from mytable t

如果你一直 0 / 1 列中的值 switch ,则可以简化:

select
    t.*,
    sum(1 - switch) over(order by excel_row) grp
from mytable t

相关问题