2016-07-01 172 views
2

試圖獲得最右側列的累計總數,該總數將重置爲每年7月份重新開始。納稅年度是七月至六月。此代碼重置歷年:SQL年度累計總計7月至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 

的樣本數據:

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

將salesmonth添加到您的SUM()OVER()? 'SUM(T.MonthlyTotal)OVER(ORDER BY 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; 

您可以使用添加六一招幾個月的日期,以獲得「稅收」月份。然後,您可以使用此信息來提取累計和的年份和月份。

請注意,您不需要子查詢。您可以將聚合函數與窗口函數混合使用。

+0

謝謝Gordon,這很好。 –