【发布时间】:2017-03-13 19:54:47
【问题描述】:
我需要如下所示的表格。如您所见,mgt_year、tot_dflt_mgt 和 to_accum_mgt 列。在 2016 的年份列中,值为 20,累积值为 600。我想要的是当我这样做时
(to_accum_mgt - tot_dflt_mgt)
我希望在上一行中显示此计算结果,如下表所示。然后这个计算结果,即 580 用于减去 9,例如 2015 年的 (580 - 9) 等所有尾随年份。感谢@mathguy,我已经在excel和Oracle中做到了这一点,但是如何在SQL Server中实现这个结果。我曾尝试使用此 SQL 服务器,但它无法正常工作。
请原谅我糟糕的英语和菜鸟格式。
我的桌子:
line_seg MGT_YEAR TOT_DFLT_MGT TOT_ACCUM_MGT
--------- -------- ------------ ------------
A 2013 10
A 2014 15
A 2015 9
A 2016 20 600
B 2013 10
B 2014 15
B 2015 8
B 2016 20 500
Oracle 解决方案:
select mgt_year, tot_dflt_mgt,
max(tot_accum_mgt) over () -
nvl( sum(tot_dflt_mgt) over
(order by mgt_year
rows between 1 following and unbounded following)
, 0 ) as tot_accum_mgt
from t;
但我无法在 SQL Server 中使用它。
需要的输出
line_seg MGT_YEAR TOT_DFLT_MGT TOT_ACCUM_MGT
--------- -------- ------------ ------------
A 2013 10 556
A 2014 15 471
A 2015 9 580
A 2016 20 600
B 2013 12 457
B 2014 15 472
B 2015 8 480
B 2016 20 500
【问题讨论】:
标签: sql sql-server