usando los valores que se necesitan(no use todos los campos de tus tablas) se puede lograr algo como esto:
Código SQL:
Ver originalCREATE TABLE #temp
(
fecha datetime,
linea INT,
ptotal INT
)
CREATE TABLE #temp2
(
cve INT,
nombre VARCHAR(20)
)
CREATE TABLE #temp3
(
id INT,
[año] INT,
mes INT,
cuota INT
)
INSERT INTO #temp VALUES ('07/03/2013',444,15000)
INSERT INTO #temp VALUES ('07/23/2013',321,12500)
INSERT INTO #temp VALUES ('07/24/2013',524,2400)
INSERT INTO #temp VALUES ('07/03/2012',444,45000)
INSERT INTO #temp VALUES ('07/04/2012',321,2500)
INSERT INTO #temp VALUES ('07/24/2012',524,600)
INSERT INTO #temp2 VALUES (444,'Kimberly')
INSERT INTO #temp2 VALUES (321,'Diageo')
INSERT INTO #temp2 VALUES (524,'choice')
INSERT INTO #temp2 VALUES (525,'Libras')
INSERT INTO #temp3 VALUES (321,2013,7,20000)
INSERT INTO #temp3 VALUES (444,2013,5,3000)
INSERT INTO #temp3 VALUES (444,2013,6,25000)
INSERT INTO #temp3 VALUES (321,2013,5,500)
INSERT INTO #temp3 VALUES (524,2013,7,26000)
INSERT INTO #temp3 VALUES (524,2013,7,30000)
--------obtenemos la suma por los años(2013 y 2012 y por el mes 7, almacenamos este resultado en una tabla temporal #temp4)
SELECT año,linea,SUM(total) total INTO #temp4 FROM(
SELECT datepart(yyyy,fecha) AS año,linea,SUM(ptotal) total FROM #temp WHERE datepart(mm,fecha)=7 GROUP BY
datepart(yyyy,fecha),linea
) AS tabla GROUP BY año,linea
SELECT nombre,SUM(isnull(cuota,0)) cuota,isnull(t4.[2012],0) AS [2012],isnull(t4.[2013],0) AS [2013] FROM(
SELECT * FROM #temp3 AS t2
WHERE t2.mes=7 AND t2.año=2013
) t1
RIGHT JOIN #temp2 AS t3 ON (t1.id=t3.cve)
LEFT JOIN (
SELECT linea,[2012],[2013]
FROM
(
SELECT año,total,linea FROM #temp4) AS sourcetable
pivot(SUM(total) FOR año IN ([2012],[2013])
) AS pivottable
) AS t4 ON (t3.cve=t4.linea)
GROUP BY año,mes,nombre,[2012],[2013]
saludos!