有一个表,其数据如下所示:
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可以达到此目的?
答案 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)