2017-05-29 13 views
0

月単位で実行されるYTDレポートがあります。私は今月の計算を行うことにより、各月のMTDの動きを計算したい+ 1マイナスMonth0 = MTDYTD番号から計算されるSQL - MTD番号

データとしてごとに以下の1つの表の

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ヶ月以上いる場合、私はあなたがこれを何回もやることができないのです。 1月と2月は、まっすぐに見える。結果

Month | Account | FebYTD | JanYTD | MTD 
Feb | AB123 | 200 | 100 | 100 

以下

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] 

私は毎月実行できる1つのクエリを実行したいと思います。たとえば、9月が来ると、9行のMTDが表示されます。 Jan-Sep。基本的には、現時点でテーブル内のすべての月に実行されます。ありがとう。

+0

は月が本当に文字列として保存されている次のクエリを試みることができますか? –

+0

@ P.Salmon私は自分自身で月の列を手動で入力します。あなたはそれについての提案があれば、私はそれを日付価値にすることができます。 – gemmo

答えて

0

あなたが

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] 
+0

素晴らしいもの、それに感謝します。それは働いて、私はCOALESCEを学びました。私はちょっと微調整しました、私は+1の代わりにMonthID -1を比較しました。私はMTD、ケース1、MTD = currYTDについてもCASEを行った。だから、私は1月に値を得ていますが、それはマイナスには何もありませんでした。 – gemmo

関連する問題