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

Posted

技术标签:

【中文标题】DB2 - 使用运行总计来计算本月至今的销售额【英文标题】:DB2 - Using Running totals to calculate Month To Date Sales 【发布时间】:2019-07-15 17:18:39 【问题描述】:

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

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

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

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

如何在 DB2 中获得 MTD 滚动销售?

我尝试了一个静态 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;

【问题讨论】:

什么平台和版本的 Db2? 有没有一种简单的方法可以检查 SQuirreL SQL 客户端以验证什么版本? 【参考方案1】:

只需在原始行级别而不是在聚合查询内运行窗口函数SUM() OVER()。此外,调整 PARTITION BYORDER BY 子句,因为您的分组应该是 yearmonth 并且 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 版本)

【讨论】:

以上是关于DB2 - 使用运行总计来计算本月至今的销售额的主要内容,如果未能解决你的问题,请参考以下文章

计算 Power Pivot 模型中总计的百分比

sql 互联网销售计数的运行总计

SQL Server Reporting Services 在聚合数据上运行总计

数据可视化之DAX篇(二十五)PowerBI常用的度量值:累计至今

oracle 占比函数

即使缺少月份,也会按月计算总计