This is just another solution that you can tailor as you wish.
Note that there isn't a variable set of columns. Maybe you should re-question your requirements. Returning a result with variable set of columns will not just mess with your execution plan caching, it can represent a problem to your database mapping in application that needs that result.
Well, here it goes...
DECLARE @start datetime = '2012-6-1'
;WITH tally AS (
SELECT TOP 52 -- change this if you want more or less than a year of data
N = row_number() OVER(ORDER BY (SELECT 0)) - 1
FROM master.dbo.syscolumns sc1)
,weekSums AS (
SELECT
N,
val =
(SELECT COUNT(*) -- Can be ISNULL(SUM(amount), 0) or something else
FROM #myreport
WHERE [date] > DATEADD(dd, N * 7, @start) AND at <= DATEADD(dd, (N + 1) * 7, @start))
FROM tally)
SELECT
totalPurchased = (SELECT sum(val) FROM weekSums),
week1 = (SELECT val FROM weekSums WHERE N = 0),
week2 = (SELECT val FROM weekSums WHERE N = 1),
week3 = (SELECT val FROM weekSums WHERE N = 2),
...
week52 = (SELECT val FROM weekSums WHERE N = 51)
You can see tally for week numbering, weekSums for summing it up and final select to show the results. It is fast, execution plan can be saved and reused (e.g. when wrapped in SP).
NOTE: This script CAN be finished with dynamic coalescing/stuffing but I don't support that kind of approach if not absolutely necessary.