2016-07-01 17 views
2

右端の列に累積合計を取得しようとすると、毎年7月に開始するようにリセットされます。課税年度は7月から6月です。年7月から6月までの年の累積SQLの合計

MonthlyTotal SalesMonth Year CumulativeTotal 
34370.56    7 2009 135682.15 
61915.29    8 2009 135682.15 
15027.21    9 2009 135682.15 
9537.80    10 2009 135682.15 
6748.38    11 2009 135682.15 
8082.91    12 2009 135682.15 
9047.77    1 2010 446574.06 
11152.21    2 2010 446574.06 
11672.16    3 2010 446574.06 
13451.61    4 2010 446574.06 
10777.37    5 2010 446574.06 
20135.99    6 2010 446574.06 
55169.70    7 2010 446574.06 
93018.89    8 2010 446574.06 
50195.15    9 2010 446574.06 
11842.17    10 2010 446574.06 
+0

SUM()OVER()にsalesmonthを追加しますか? 'SUM(T.MonthlyTotal)OVER(T. [Year]、T.SalesMonth)' – JamieD77

答えて

0

あなたはあなたのデータのパーティション分割スキームを変更する必要があります:

select SUM(SubTotal) AS MonthlyTotal, MONTH(CreateDate) AS SalesMonth, 
     Year(CreateDate) AS [Year], 
     SUM(SUM(SubTotal)) OVER (PARTITION BY MIN(Year(DATEADD(month, 6, CreateDate))) 
           ORDER BY MIN(MONTH(DATEADD(month, 6, CreateDate))) 
           ) as FY_YTD 
from OrderFormHeader 
Group by Month(CreateDate), Year(CreateDate) 
Order by [Year], SalesMonth; 

あなたが6を追加するトリックを使用することができます。このコードは、暦年:

Select T.MonthlyTotal 
     ,T.SalesMonth 
     ,T.[Year] 
     ,SUM(T.MonthlyTotal) OVER (ORDER BY T.[Year]) AS CumulativeTotal 
     From (SELECT 
     SUM (SubTotal) AS MonthlyTotal 
     ,MONTH(CreateDate) AS SalesMonth 
     ,Year(CreateDate) AS [Year] 
     FROM OrderFormHeader 
     Group by Month(CreateDate),Year(CreateDate)) AS T 

    Order by T.[Year],T.SalesMonth 

サンプル・データをリセット月には、 "税"の月を取得する。次に、この情報を使用して、累積合計の年と月を抽出することができます。

サブクエリは必要ありません。集計関数とウィンドウ関数を混在させることができます。

+0

ゴードンに感謝します。 –