SQL Server表计算到特殊列

时间:2019-03-05 12:41:04

标签: sql sql-server sql-server-2008

+----------+---------------+--------+
|   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     |
+----------+---------------+--------+-----------+

3 个答案:

答案 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