Najłatwiejszym sposobem rozwiązania pytania jest użycie ROLLUP w grupie według zapytania (http://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx )
Oto SQL Fiddle (http://sqlfiddle.com/#!3/3ce09/19 )
Definicja daty:
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);
Rzeczywiste zapytanie:
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
Wynik:
LABEL BALLS
2013-11-21 - 2013-11-27 25
2013-11-28 - 2013-12-04 42
2013-12-05 - 2013-12-11 3