y para los años anteriores empieza en 1??? Mientras mas claro el requerimiento mejor la respuesta ;)
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 anio,producto, IDENTITY(INT,1,1) AS rn INTO
#temp FROM #mitabla
DECLARE @x INT
DECLARE @y INT
DECLARE @anio INT
DECLARE @producto INT
DECLARE @actual INT
SET @actual=datepart(yyyy,getdate())
SET @x=1
SET @y=1
while @x<=(SELECT COUNT(*) FROM #temp)
BEGIN
SELECT @anio=anio,@producto=producto FROM #temp WHERE rn=@x
IF @anio=@actual
SET @y=datepart(mm,getdate())
while @y<=12
BEGIN
INSERT INTO #meses VALUES (@anio,@y,@producto)
SET @y=@y+1
END
SET @y=1
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)
DROP TABLE #temp
DROP TABLE #meses
aqui el query con el cambio que mencionas ;)