[英]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 BY
和ORDER 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.