-1

我有下表:

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的开始时,它会忽略上一年重新计算。

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

4

2 回答 2

1

只需使用运行总和功能:

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

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

于 2018-05-09T01:44:35.750 回答
0

一种选择使用相关子查询来查找累积总数:

SELECT
    t1.oDate,
    t1.oValue,
    (SELECT SUM(t2.oValue) FROM yourTable t2
     WHERE t2.oDate <= t1.oDate AND YEAR(t1.oDate) = YEAR(t2.oDate)) AS YTD
FROM yourTable t1
ORDER BY t1.oDate;

在此处输入图像描述

演示

于 2018-05-09T01:44:29.483 回答