[英]SQL - MTD numbers calculated from YTD numbers
我們有一個YTD報告,該報告每月運行一次。 我想通過計算Month + 1減去Month0 = MTD來計算每個月的MTD運動
下表中的數據如下
Month | Account | YTD amount
Jan | AB123 | 100
Feb | AB123 | 200
Mar | AB123 | 350
我有許多帳戶,需要運行如下所示的MTD。
Month | Account | MTD Amount
Jan | AB123 | 100
Feb | AB123 | 100
Mar | AB123 | 150
我讀過您可以做一個自我聯接,可以在同一張表中搜索另一行。 但是,如果您有超過3個月的時間,我無法完全理解如何多次執行此操作。 一月和二月看起來直截了當。
SELECT A.[Month]
,A.[Account]
,A.[YTD] FebYTD
,B.[YTD] JanYTD
,A.[YTD] - B.[YTD] MTD
FROM
(
SELECT [Month]
,[Account]
,[YTD]
FROM [PWC_2017].[dbo].[MTD test]
where [Month] = 'Feb'
) A
join
(
SELECT [Month]
,[Account]
,[YTD]
FROM [PWC_2017].[dbo].[MTD test]
Where [Month] = 'Jan'
) B
on A.[Account] = B.[Account]
結果如下
Month | Account | FebYTD | JanYTD | MTD
Feb | AB123 | 200 | 100 | 100
我想做一個查詢,每個月可以運行一次。 因此,例如,當9月一個月來臨時,它將給我9行MTD。 1月-9月。 基本上,它將在當前時間表中可用的所有月份上運行。 謝謝。
上述內容的一個小補充。
基於與YTD-1進行比較的前提,並包括了MTD的情況,盡管示例中解決了1月的問題,但例如僅在3月左右記錄數據時,它是行不通的。 第一個MTD將為NULL。
所以我簡單地講,當以前的YTD不存在時,添加一個零,
CASE CurrentYTD.Month_ID
WHEN 1 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 2 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 3 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 4 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 5 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 6 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 7 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 8 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 9 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 10 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 11 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
WHEN 12 Then COALESCE (CurrentYTD.Amount,PreviousYTD.Amount)- COALESCE(PreviousYTD.Amount,0)
END AS Amount_MTD
您可以嘗試以下查詢
SELECT Current.[Month],
Current.[Account],
Current.[YTD] CurrentYTD,
Next.[YTD] NextYTD,
COALESCE(Next.[YTD], Current.[YTD]) - Current.[YTD] MTD
FROM (SELECT [Month],
CASE [Month]
WHEN 'Jan' THEN 1
WHEN 'Feb' THEN 2
WHEN 'Mar' THEN 3
WHEN 'Apr' THEN 4
WHEN 'May' THEN 5
WHEN 'June' THEN 6
WHEN 'July' THEN 7
WHEN 'Aug' THEN 8
WHEN 'Sept' THEN 9
WHEN 'Oct' THEN 10
WHEN 'Nov' THEN 11
WHEN 'Dec' THEN 12
END AS [MonthId],
[Account],
[YTD]
FROM [PWC_2017].[dbo].[MTD test]) Current
LEFT JOIN (SELECT [Month],
CASE [Month]
WHEN 'Jan' THEN 1
WHEN 'Feb' THEN 2
WHEN 'Mar' THEN 3
WHEN 'Apr' THEN 4
WHEN 'May' THEN 5
WHEN 'June' THEN 6
WHEN 'July' THEN 7
WHEN 'Aug' THEN 8
WHEN 'Sept' THEN 9
WHEN 'Oct' THEN 10
WHEN 'Nov' THEN 11
WHEN 'Dec' THEN 12
END AS [MonthId],
[Account],
[YTD]
FROM [PWC_2017].[dbo].[MTD test]) Next
ON Current.[Account] = Next.[Account]
And Current.[MonthId] + 1 = Next.[MonthId]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.