[英]SQL calculate MTD out of YTD
我嘗試在 SQL MTD 中計算表的成本。
我有下表:
年 | 用戶 | 月 | 類型 | 成本 | 空白的 |
---|---|---|---|---|---|
2021 | 一個 | 1 | 類型1 | 10 | 0 |
2021 | 一個 | 2 | 類型1 | 20 | 0 |
2021 | 一個 | 3 | 類型1 | 35 | 0 |
2022 | 一個 | 1 | 類型1 | 5 | 0 |
2022 | 一個 | 2 | 類型1 | 35 | 0 |
2021 | b | 1 | 類型1 | 10 | 0 |
2021 | b | 2 | 類型1 | 30 | 0 |
我現在需要的是每年、用戶和類型的 MTD 成本
年 | 用戶 | 月 | 類型 | 成本 | 成本MTD | 空白的 |
---|---|---|---|---|---|---|
2021 | 一個 | 1 | 類型1 | 10 | 10 | 0 |
2021 | 一個 | 2 | 類型1 | 20 | 10 | 0 |
2021 | 一個 | 3 | 類型1 | 35 | 15 | 0 |
2022 | 一個 | 1 | 類型1 | 5 | 5 | 0 |
2022 | 一個 | 2 | 類型1 | 35 | 30 | 0 |
2021 | b | 1 | 類型1 | 10 | 10 | 0 |
2021 | b | 2 | 類型1 | 30 | 20 | 0 |
我可以用 SQL 中的查詢來做到這一點嗎?
我試過這樣但它不起作用:
SELECT t1.year, t1.user, t1.month, t1.type, t1.cost,
iif(t1.month = '1', t1.cost, t1.cost- t2.cost) AS costMTD, 0 AS blank
FROM dbo.usercosts AS t1 INNER JOIN dbo.usercosts AS t2
ON t1.year = t2.year
AND t1.user= t2.user
AND t1.type= t2.type
AND t2.month = iif(t2.month = '1', '1', t1.month - 1)
您可以使用LAG
查看上一行的成本。
select
year, user, month, type, cost,
cost - coalesce(lag(cost) over(partition by user order by year, month), 0) as costmtd,
0 as blank
from dbo.usercosts as
order by user, year, month;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.