質問を解決する最も簡単な方法は、クエリごとにグループで ROLLUP を使用することです (http://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx )
これが SQL Fiddle (http://sqlfiddle.com/#!3/3ce09/19 )
日付の定義:
create table test ( Id INT IDENTITY(1,1), date DateTime, balls int ); insert into test(date, balls) values('11/21/2013', 2); insert into test(date, balls) values('11/22/2013', 3); insert into test(date, balls) values('11/23/2013', 4); insert into test(date, balls) values('11/24/2013', 5); insert into test(date, balls) values('11/25/2013', 2); insert into test(date, balls) values('11/26/2013', 5); insert into test(date, balls) values('11/27/2013', 4); insert into test(date, balls) values('11/28/2013', 3); insert into test(date, balls) values('11/29/2013', 9); insert into test(date, balls) values('11/30/2013', 8); insert into test(date, balls) values('12/01/2013', 7); insert into test(date, balls) values('12/02/2013', 4); insert into test(date, balls) values('12/03/2013', 5); insert into test(date, balls) values('12/04/2013', 6); insert into test(date, balls) values('12/05/2013', 2); insert into test(date, balls) values('12/06/2013', 0); insert into test(date, balls) values('12/07/2013', 1);
プレ>実際のクエリ:
select label, balls from ( SELECT (DATEDIFF(d , '11/21/2013' , date) / 7) as week, ((DATEDIFF(d , '11/21/2013' , date) / 7) + 1) as week1, LEFT(CONVERT(VARCHAR, (DateAdd(d, (DATEDIFF(d , '11/21/2013' , date) / 7)*7, '11/21/2013')), 120), 10) + ' - ' + LEFT(CONVERT(VARCHAR, (DateAdd(d, ((DATEDIFF(d , '11/21/2013' , date) / 7) + 1)*7 - 1, '11/21/2013')), 120), 10) as label, SUM(Balls) as balls FROM test GROUP BY rollup((DATEDIFF(d , '11/21/2013' , date) / 7)) ) as t where t.label is not null
プレ>結果:
LABEL BALLS 2013-11-21 - 2013-11-27 25 2013-11-28 - 2013-12-04 42 2013-12-05 - 2013-12-11 3
プレ>