首页 > 解决方案 > 每年每个月的 SQL YTD

问题描述

我有下表:

oDate        oValue
----------------------------
2017-01-01   40
2017-02-01   50
2017-03-01   60
2017-04-01   10

每个月只有一个数据。
然后,我想得到以下结果:

oDate        oValue         YTD
----------------------------------------
2017-01-01   40             40
2017-02-01   50             90
2017-03-01   60             150
2017-04-01   10             160

因此,该YTD值是oValue上个月的总和,它将在选定年份的 12 月结束。当新Year的开始时,它会忽略上一年重新计算。

有没有人有这个想法?
谢谢你。

标签: sqltsqlsql-server-2014

解决方案


只需使用运行总和功能:

select odate, ovalue,
       sum(ovalue) over (partition by year(odate) order by odate) as ytd
from t;

这是一个窗口函数。每年partition by重新计算总和。做一年内的order by累计总和。


推荐阅读