2013-11-26 189 views
0

之間差異的總和我有一個看起來像這樣的表:SQL查詢來計算的金額

CustID Year Month Amount 
------ ---- ----- ------ 
11  2012 12 310685 
11  2013 1  312119 
11  2013 2  313929 
11  2013 3  315511 
19  2012 12 189736 
19  2013 1  195161 
19  2013 2  199713 
10  2013 1  448438 
10  2013 2  453850 
10  2013 3  460198 

我需要:

  1. 每個客戶ID,計算當前的Amount的區別月和Amount(如果沒有「上個月」,則忽略它 - 返回NULL0或其他)。
  2. 總結每個月的差異。

預期結果:

Year Month Total 
---- ----- ----- 
2012 12 NULL 
2013 1  6859  // (312119-310685) + (195161-189736) [no diff for CustID = 10 because it has no amount for 2012.12] 
2013 2  11774 
2013 3  7930 

我嘗試了使用CTE和ROW_NUMBER()與自加盟等方式做,但查詢糾纏在一起,我失去了我的路...任何幫助將不勝感激。

+0

使用自聯接http://stackoverflow.com/questions/3362038/what-is-self-join-and-when-would-you-使用它 –

回答

0

我覺得這樣做你是什麼後:

WITH YearMonth 
AS 
(
    SELECT CustID, 
      [Year], 
      [Month], 
      ([Year] * 12 + [Month]) AS YearMonth, Amount 
    FROM YourTable 
) 
SELECT YM.[Year], YM.[Month], (YM.Amount - PREV.Amount) AS Total 
FROM YearMonth YM 
LEFT 
JOIN YearMonth PREV 
     ON PREV.CustID = YM.CustID 
     AND PREV.YearMonth = YM.YearMonth - 1 
+0

是的,它指出我的方向是正確的。我只加了'SUM()'函數,等等! – kodkod