PIVOT
列を返すことに熱心な場合は、動的SQLを使用してこれを行うことができます。
DECLARE @cols AS VARCHAR(8000),
@query AS VARCHAR(8000)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(YrWeek)
FROM (SELECT DISTINCT CAST(YEAR(rpt_dt)AS VARCHAR(4)) + '-' + CAST(DATEPART(week,rpt_dt)AS VARCHAR(2))'YrWeek'
FROM #myreport
WHERE rpt_dt > DATEADD(YEAR,-1,GETDATE()))sub
ORDER BY LEFT(YrWeek,4) DESC,RIGHT(YrWeek,2)DESC
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT * FROM
(
SELECT CAST(YEAR(rpt_dt)AS VARCHAR(4)) + ''-'' + CAST(DATEPART(week,rpt_dt)AS VARCHAR(2)) YrWeek, COUNT(*)CT
FROM #myreport
GROUP BY CAST(YEAR(rpt_dt)AS VARCHAR(4)) + ''-'' + CAST(DATEPART(week,rpt_dt)AS VARCHAR(2))
) AS T1
PIVOT (SUM(CT) FOR YrWeek IN ('+@cols+')) AS T2
'
EXEC(@query)
この例では、昨年の毎週、今日から逆方向にプルしています。
これは、日付のリストだけを使用し、その日付までにレコードの数を取得するデモです。これは、最終的に行っていることと同じだと思います。
SQL フィドル