Рабочий пример
Пример таблицы, содержит всего 2 столбца thedate datetime, amount numeric
select cast(datediff(d, number%1000, getdate()) as datetime) as thedate, number as amount
into testtable
from master..spt_values
Запрос, принимающий в качестве параметров месяц и год
declare @month int, @year int
select @month = 2, @year = 2011
select *
from
(
select
amount,
'Week-' + right(dense_rank() over (order by datepart(wk, thedate)),1) week_in_month
from testtable
where thedate >= cast(@year*10000+@month*100+1 as char(8))
and thedate < dateadd(m,1,cast(@year*10000+@month*100+1 as char(8)))
) P
pivot (sum(amount) for week_in_month in ([Week-1],[Week-2],[Week-3],[Week-4],[Week-5])) V
Примечание:
cast(@year*10000+@month*100+1 as char(8))
: первый день месяца
dateadd(m,1,..)
: первый день месяца после