2016-07-01 125 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,这很好。 –