簡體   English   中英

DB2-使用運行總計計算本月至今的銷售額

[英]DB2 - Using Running totals to calculate Month To Date Sales

我正在使用DB2代碼計算本月迄今的銷售額,以比較2019年7月與2018年7月的總數。

需要比較當前月份的數據和去年同一月份的數據,否則我將比較兩個不同時期的數據。

例如,如果它是靜態的,我將比較mtd 7月(2019)第2周的銷售額與mtd 7月第4周(2018)的銷售額。

我需要mtd 2019年7月第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;

只需在原始行級別而不是在聚合查詢中運行窗口函數SUM() OVER() 此外,調整PARTITION BYORDER BY子句,因為您的分組應該是年份月份星期應該是排序列。

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演示 (使用Db2 Developer-C 11.1版)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM