如何在Oracle表中计算YTD(年初至今)值

时间:2019-01-09 05:37:49

标签: sql oracle

有一个表,其数据如下所示:

year month v1 v2    
2017 1     2  3
2017 2     4  5
...  ..   ..  ..
2017 12    9  3    
2018 1     1  3
2018 2     6  2
...  ..   ..  ..
2018 12    2  2    

该表具有年,月,v1,v2总共4个字段,现在我想用SQL为每一行计算YTD值,查询结果如下所示:

year month v1 v2   v1_YTD    v2_YTD
2017 1     2  3    2         3
2017 2     4  5    6         8
...  ..   ..  ..   ..        ..
2017 12    9  3    m1        n1    

2018 1     1  3    1         3
2018 2     6  2    7         5
...  ..   ..  ..   ..        ..
2018 12    2  2    m2        n2    

例如,YTD值计算2月,则YTD值= 1月+ 2月,如果月份是12月,则YTD值应为1月+ 2月+ 3月+ ... + 12月的值。

年初至今的值不能跨年。

是否有SQL可以达到此目的?

2 个答案:

答案 0 :(得分:3)

您可以使用分析功能SUM()OVER()

SELECT year, month, v1, v2,
    SUM(v1) OVER (PARTITION BY year ORDER BY month) AS v1_ytd,
    SUM(v2) OVER (PARTITION BY year ORDER BY month) AS v2_ytd
FROM table_name
ORDER BY year, month;

答案 1 :(得分:2)

不确定它将在Oracle 10g及更早版本中工作。尝试添加此字段:
SUM(v1) OVER (PARTITION BY year ORDER BY month)