Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在Oracle表中计算年初至今值_Sql_Oracle - Fatal编程技术网

Sql 如何在Oracle表中计算年初至今值

Sql 如何在Oracle表中计算年初至今值,sql,oracle,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

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

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    
例如,计算2月份的YTD值,则YTD值=1月+2月,如果月份为12月,则YTD值应为1月+2月+3月+…+12月的值

年初至今值不应跨年度


是否有SQL可以实现此目的?

不确定它是否能在Oracle 10g及更早版本中工作。尝试添加此字段:

SUM(v1)OVER(按年按月划分)

您可以使用分析函数SUM()OVER()


我不认为你必须考虑Oracle版本10G——这是15年。我在一个仍然在Oracle 10G上的应用程序工作:(上帝,我希望他们很快杀死它。
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;