ok, ya entendi que ocupas, pero esto sera solo para 2 años?? que pasa si tienes 2 productos y 3 años diferentes o no es el caso??? de no ser este el caso tu query queda asi:
Código SQL:
Ver originalCREATE TABLE #mitabla(
Producto VARCHAR(04),
Anio INT,
Mes INT,
Cantidad NUMERIC(16,8)
)
GO
INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2014,6,200)
INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2014,7,100)
INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2014,8,50)
INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2014,9,300)
INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2015,1,150)
INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2015,2,100)
INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1002',2014,10,50)
INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1002',2014,11,80)
CREATE TABLE #meses
(
anio INT,
mes INT,
producto INT
)
SELECT DISTINCT producto, IDENTITY(INT,1,1) AS rn INTO
#temp
FROM #mitabla ORDER BY producto
DECLARE @x INT
DECLARE @y INT
DECLARE @z INT
DECLARE @anio INT
DECLARE @producto INT
DECLARE @actual INT
SET @actual=datepart(yyyy,getdate())
SET @x=1
SET @y=1
SET @z=1
SET @anio=@actual
while @x<=(SELECT COUNT(*) FROM #temp)
BEGIN
SELECT @producto=producto FROM #temp WHERE rn=@x
SET @y=DATEPART(mm,getdate())
while @z<=12
BEGIN
INSERT INTO #meses VALUES (@anio,@y,@producto)
SET @y=@y+1
IF @y=12
BEGIN
SET @y=1
SET @anio=@anio+1
END
SET @z=@z+1
END
SET @y=1
SET @z=1
SET @anio=@actual
SET @x=@x+1
END
SELECT t2.producto,t2.anio,t2.mes,isnull(t1.cantidad,0) AS cantidad FROM #mitabla AS t1
RIGHT JOIN #meses AS t2 ON (t1.Mes=t2.mes AND t1.Anio=t2.anio AND t1.Producto=t2.producto)
DROP TABLE #temp
DROP TABLE #meses