DB2-使用“运行总计”来计算本月迄今的销售额

时间:2019-07-15 17:18:39

标签: sql db2 running-total

我正在使用DB2代码计算本月迄今的销售额,以比较2019年7月与2018年7月的总计。

需要比较当前月份的数据和去年同一月份的数据,否则我将比较两个不同时期的数据。

如果是静态的,我将比较mtd 7月(2019年)第2周的销售额与mtd 7月第4周(2018年)的销售额。

我需要2019年7月mtd第2周与mtd(2018年)第2周mtd销售。

如何在DB2中获得MTD Rolling销售?

我尝试了静态MTD-这是;但是,这不是理想的方法。对于滚动,我尝试了sum(),但这会返回语法错误(-119&-727)。

样品表

  

年|月|周|销量

     

2018年|七月| 1 | 2000

     

2018年|七月| 2 | 1500

     

2018年|七月| 3 | 1000

     

2018年|七月| 4 | 2000

     

2019 |七月| 1 | 1750

     

2019 |七月| 2 | 2100

预期结果

  

年份|月份|周|销售总计

     
     

2018年|七月| 1 | 2000 | 2000

     

2018年|七月| 2 | 1500 | 3500

     

2018年|七月| 3 | 1000 | 4500

     

2018年|七月| 4 | 2000 | 6500

     

2019 |七月| 1 | 1750 | 1750

     

2019 |七月| 2 | 2100 | 3850

-从静态

收集的错误结果
  

年份|月份|周|销售总计

     
     

2018年|七月| 1 | 2000 | 6500

     

2018年|七月| 2 | 1500 | 6500

     

2018年|七月| 3 | 1000 | 6500

     

2018年|七月| 4 | 2000 | 6500

     

2019 |七月| 1 | 1750 | 3850

     

2019 |七月| 2 | 2100 | 3850

来自静态的代码(有效,但不能用于比较当前月份):

Select
     a.Year,
     a.Month,
     a.Week,
     sum(a.sales) as weekly
     mtd.mtd_sales as MTD
from sales a 
inner join 
     (Select
          a.Year,
          a.Month,
          sum(a.sales) as mtd_sales
      from sales a
      group by
          a.Year,
          a.Month) MTD on MTD.week = a.week
group by
     a.Year,
     a.Month,
     a.Week,
     mtd.mtd;

我尝试使用下面的代码进行滚动,但是会产生错误(SQL状态-119和-727),我认为这表明语法错误。

滚动代码

Select
  a.Year,
  a.Month,
  a.Week,
  sum(a.sales) over (Partition by week order by 
month) 
from sales a
group by
    a.year,
    a.month,
    a.week;

1 个答案:

答案 0 :(得分:1)

仅在原始行级别而不是在聚合查询中运行窗口函数SUM() OVER()。此外,调整PARTITION BYORDER BY子句,因为您的分组应为 year ,而 month week 为订购列。

SELECT
  s.Year,
  s.Month,
  s.Week,
  s.Sales,
  SUM(s.sales) over (PARTITION BY s.Year, s.Month ORDER BY s.Week) as running_total
FROM sales s;

dbfiddle demo (使用Db2 Developer-C 11.1版)