2013-08-26 20 views
5

Na przykład wyobrazić tabelę poniżejwybierz liczbę całkowitą() według roku i miesiąca?

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 

następnie w styczniu 2012 roku liczba wynosiła 10 kont z tego zapytania

select count(*) from account 

powiedzmy mam 5 nowych kont w lutym 2012 roku, a następnie zapytań count(*) w W lutym 2012 r. Zwraca 15 kont. Jeśli mam 10 nowych kont w marcu 2012 r., To zapytanie o numer count(*) w marcu 2012 r. Zwraca łącznie 35 kont.

chciałbym uzyskać wyniki poniżej

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

data utworzenia konta w tabeli jest data,

ale jeśli robię to zapytanie

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

uzyskać wynik poniżej zamiast:

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

, jak mogę uzyskać pierwszy wynik za pomocą prostego zapytania? nie ma pętli

Odpowiedz

4

Potrzebujesz łącznej kwoty. Są tam kilka sposób to zrobić w SQL Server (patrz Calculate a Running Total in SQL Server), ale dla SQL 2005 najprostsza (nie najszybszy) sposobem byłoby samo dołączyć

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

z tego zapytania i uzyskać ten sam wynik z drugie zapytanie mam, zobacz przykład w pierwszym przykładzie każdego miesiąca to count() bieżący miesiąc WIĘCEJ count() starych miesięcy – angel

+0

zobacz zaktualizowaną odpowiedź –

+0

dzięki, że potrzebowałem – angel