【问题标题】:how to calculate YTD (Year To Date) value in Oracle table如何计算 Oracle 表中的 YTD(年初至今)值
【发布时间】:2023-04-01 07:51:01
【问题描述】:

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

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 月的值。

YTD 值不应跨年。

有没有SQL可以达到这个目的?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你可以使用解析函数 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;
    

    【讨论】:

      【解决方案2】:

      不确定它是否适用于 Oracle 10g 及更早版本。尝试添加此字段:
      SUM(v1) OVER (PARTITION BY year ORDER BY month)

      【讨论】:

      • 我认为您不必考虑 Oracle 版本 10g - 已经 15 年了。
      • 我正在开发一个仍然在 Oracle 10g 上的应用程序 :( 上帝我希望他们尽快杀掉它。
      猜你喜欢
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      相关资源
      最近更新 更多