2013-10-21 122 views
0

我需要獲取每月的帳戶總數,但在下個月應該包括以前的總數。 AccNO表中有兩列,日期另一列。我們按月份和日期計算每月總計。每月計數條目但前幾個月總計SQL

accNO   HO_DATE 
--------------------------- 
TN128757 2013-07-21 

TN126822 2013-05-16 

TN130058 2013-10-11 

TN130375 2013-10-30 

TN128396 2013-06-20 

TN129800 2013-10-22 

TN127399 2013-08-25 

所以最後的總數將是

2013/05 = 1 

2013/06 = 2 

2013/07 = 3 

2013/08 = 4 

2013/09 = 4 

2013/10 = 7 

所以我將如何通過組或如何將這個被包括在where子句。我使用MSSQL 2012

感謝

回答

0

我使用你進入#tbl提供的數據,然後進行以每月數和上年#TBL 1。在那之後,我加入#tbl1和#tbl本身,條件如小於等於年和月。

select * into #tbl from 
(
select 'TN128757' accNO, CAST('2013-07-21' AS date) HO_DATE 
union all select 'TN126822', cast('2013-05-16' as date) 
union all select 'TN130058', cast('2013-10-11' as date) 
union all select 'TN130375', cast('2013-10-30' as date) 
union all select 'TN128396', cast('2013-06-20' as date) 
union all select 'TN129800', cast('2013-10-22' as date) 
union all select 'TN127399', cast('2013-08-25' as date) 
) A 

select * into #tbl1 from (
select COUNT(*) Cnt, CAST(DATEPART(Year,HO_DATE) as varchar) + '-' + CAST(DATEPART(MONTH,HO_DATE) as varchar) MONTHYEAR, DATEPART(Year,HO_DATE) YEAR ,DATEPART(MONTH,HO_DATE) MONTH 
from #tbl 
group by DATEPART(Year,HO_DATE),DATEPART(MONTH,HO_DATE), CAST(DATEPART(Year,HO_DATE) as varchar) + '-' + CAST(DATEPART(MONTH,HO_DATE) as varchar) 
) A 

select * from #tbl1 

select A.MONTHYEAR, A.YEAR, A.MONTH, SUM(B.Cnt) from #tbl1 A 
inner join #tbl1 B ON A.YEAR>=B.YEAR and A.MONTH>=B.MONTH 
GROUP BY A.MONTHYEAR, A.YEAR,A.MONTH 
order by A.YEAR,A.MONTH 

drop table #tbl; 
drop table #tbl1; 

希望這適用於你。相應地給出表名並讓我知道你是否有任何問題。

乾杯:) ......

+0

我沒有設法讓失蹤MonthYear如您在結果顯示。我會繼續嘗試並儘快更新。 – vinbhai4u