2013-08-26 10 views
5

その後、2012年1月にカウントはこのクエリで10個のアカウント合計カウント()グループを年と月で選択しますか?例えば

select count(*) from account 

は、その後でcount(*)を照会、のは、私が2012年2月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年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を参照)ですが、SQL 2005のための最も簡単な(ない最速の)方法は、自己がこのクエリと

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

に参加することになる私は同じ結果を得ます2番目のクエリは、最初の例の例を参照してください毎月count()現在の月MORE count()古い月 – angel

+0

更新された回答を参照してください –

+0

ありがとう – angel

関連する問題