Me funciono el uso de la función PIVOT de SQL para la agrupación semanal en columnas.
Y previo a esto las funciones de fecha de SQL DATEPART(WEEK,fecha) para saber la semana y un where para que la asocie a Semana#1, Semana#2....
DECLARE @FechaInicio AS DateTime, @FechaFinal AS DateTime
SET @FechaInicio = '2014-01-01 00:00:00.000'
SET @FechaFinal = '2014-12-31 00:00:00.000'
Select a.cardcode AS 'Codigo',a.cardname AS 'Nombre',Year(a.DocDate) AS 'Ano',datepart(week,a.DocDate) AS 'semana',
SUM(a.doctotal-a.vatsum+a.wtsum) as 'COMPRAS'
INTO #TEMP1
From OPCH a
WHERE a.CANCELED = 'N' and a.DocDate BETWEEN @FechaInicio AND @FechaFinal
group by a.CardCode,a.cardname,a.docdate
Select a.cardcode AS 'Codigo',a.cardname AS 'Nombre',Year(a.DocDate) AS 'Ano',datepart(week,a.DocDate) AS 'semana',
-SUM(a.doctotal-a.vatsum+a.wtsum) as 'COMPRAS'
INTO #TEMP2
From ORPC a
WHERE a.CANCELED = 'N' and a.DocDate BETWEEN @FechaInicio AND @FechaFinal
group by a.CardCode,a.CardName,a.docdate
Select
T.Codigo as 'CODIGO', T.Nombre as 'NOMBRE', T.Ano 'ANO', 'Semana'+ cast(t.semana as varchar(2)) 'SEMANA',
sum(t.COMPRAS) AS 'COMPRAS'
INTO #TEMP4
from
(
Select * from #TEMP1
union
Select * from #TEMP2
) as T
inner join OCRD T0
on T0.CardCode = T.Codigo and T0.CardType = 'S'
GROUP BY
T.Codigo, T.Nombre ,T.Ano,T.semana
Select * from #TEMP4
pivot
(
sum(COMPRAS)
for SEMANA in (
Semana1, Semana2, Semana3, Semana4, Semana5, Semana6, Semana7, Semana8, Semana9, Semana10,
Semana11, Semana12, Semana13, Semana14, Semana15, Semana16, Semana17, Semana18, Semana19, Semana20,
Semana21, Semana22, Semana23, Semana24, Semana25, Semana26, Semana27, Semana28, Semana29, Semana30,
Semana31, Semana32, Semana33, Semana34, Semana35, Semana36, Semana37, Semana38, Semana39, Semana40,
Semana41, Semana42, Semana43, Semana44, Semana45, Semana46, Semana47, Semana48, Semana49, Semana50,
Semana51, Semana52
)
) piv