You can do this using the numbers table. Here I use master..spt_values.
declare @T table ( surname varchar(20), [Date] datetime, Duration int ) insert into @T values ('Bertram', '2011-09-01', 3), ('Coulois', '2011-09-01', 5), ('LeBlanc', '2011-09-01', 6), ('Fosters', '2011-09-01', 3), ('Blanche', '2011-09-01', 2), ('Bertram', '2011-09-02', 6), ('Gillian', '2011-09-02', 4), ('Pikklar', '2011-09-02', 7), ('Thierry', '2011-09-03', 6), ('Selanne', '2011-09-03', 6) select dateadd(day, N.number, [Date]) as [Date], count(*) as [Count] from @T as T inner join master..spt_values as N on N.number between 0 and T.Duration where N.type = 'P' group by dateadd(day, N.number, [Date]) order by dateadd(day, N.number, [Date])
Result:
Date Count ----------------------- ----------- 2011-09-01 00:00:00.000 5 2011-09-02 00:00:00.000 8 2011-09-03 00:00:00.000 10 2011-09-04 00:00:00.000 9 2011-09-05 00:00:00.000 7 2011-09-06 00:00:00.000 7 2011-09-07 00:00:00.000 5 2011-09-08 00:00:00.000 4 2011-09-09 00:00:00.000 3