+----------+---------------+--------+
| Year | Cases | Closed |
+----------+---------------+--------+
| 2016 | 250 | 0 |
| 2017 | 350 | 370 |
| 2018 | 330 | 490 |
| 2019 | 60 | 50 |
+----------+---------------+--------+
我需要添加“ State”列,其公式为:State =“ State @ Year before + Cases @ this Year-Closed @ this Year”
// 0+250-0 = 250
// 250+350-370 = 230
// 230+330-490 = 70
// 70+60-50 = 80
结果:
+----------+---------------+--------+-----------+
| Year | Cases | Closed | State |
+----------+---------------+--------+-----------+
| 2016 | 250 | 0 | 250 |
| 2017 | 350 | 370 | 230 |
| 2018 | 330 | 490 | 70 |
| 2019 | 60 | 50 | 80 |
+----------+---------------+--------+-----------+
答案 0 :(得分:2)
使用累计和:
select t.*,
sum(cases - closed) over (order by year) as state
from t;
我发现state
是一个累加的总和。
答案 1 :(得分:1)
您想要窗口功能:
select t.*,
sum(cases - closed) over (order by year) as state
from table t;
编辑:对于旧版本,您可以使用apply
:
select t.*, t1.state
from table t cross apply
(select sum(t1.cases - t1.closed) as state
from table t1
where t1.yr <= t.yr
) t1;
答案 2 :(得分:0)
尝试以下代码非常简单:
select *,
sum(cases - closed) over (order by year) as [state]
from StackOverFlow_4