2013-08-26 81 views
5

例如想象一個表如下按年份和月份選擇總計數()組?

select accountid, createdon from account 

73C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:47.000 
A7C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:48.000 
B7C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:48.000 
FBC56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:49.000 
CBC66F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:54.000 
87C66F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:53.000 
53C76F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:55.000 
87C76F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:56.000 
2ED89924-5CFC-E111-A4F8-005056977FBC 2012-09-11 22:01:51.000 
C0D79924-5CFC-E111-A4F8-005056977FBC 2012-09-11 22:01:49.000 

然後在2012年1月數爲10個賬戶與此查詢

select count(*) from account 

比方說,我有5個新的賬戶在2012年2月,然後查詢count(*)在2012年2月返回15個賬戶。如果我在2012年3月有10個新帳戶,那麼2012年3月查詢count(*)會返回總共35個帳戶。

我想獲得下面的結果表帳戶

2012-january-10 accounts 
2012-febrary-15 accounts 
2012-march- 35 accounts 

創建日期是日期,

,但如果我這樣做查詢

select year(createdon), month(createdon), count(*) quantity 
from accounts 
group by year(createdon), month(createdon) 

我得到的結果如下相反:

2012-january-10 accounts 
2012-febrary-5 accounts 
2012-march- 20 accounts 

那麼我怎樣才能得到第一個結果與一個簡單的查詢?不循環

回答

4

您需要一個滾動總數。有幾個是這樣做在SQL Server(見Calculate a Running Total in SQL Server),但2005年的SQL簡單(未最快)的方法是自聯接

with cte as (
    select 
     datename(year, createdon) + '-' + datename(month, createdon) as name, 
     convert(nvarchar(6), createdon, 112) as grp, 
     count(*) as cnt 
    from account 
    group by 
     datename(month, createdon), datename(year, createdon), 
     convert(nvarchar(6), createdon, 112) 
) 
select 
    c1.name, sum(c2.cnt) as cnt 
from cte as c1 
    inner join cte as c2 on c2.grp <= c1.grp 
group by c1.name 

sql fiddle demo

+0

與此查詢我得到相同的結果與第二個查詢我有,每個月看第一個示例中的示例是count()current month更多count()of old months – angel

+0

查看更新的答案 –

+0

謝謝,我需要 – angel