Cita:
Iniciado por iislas Es muy simple la solución, tienes registros que hacen mención a MESES y por ende, NO TENDRAS algunos meses que tengas información.
"Dadme un base y moveré al mundo"
Debes crear una tabla con LOS MESES del 01 ENERO al 12 DICIEMBRE y hacer una relación de ambas tablas, aquellos registros que se presenten como NULL, son aquellos que NO TIENEN INFORMACION.
¿Me explique?
Exacto exacto amigo iislas es lo que he estado pensando para resolver esto :P pero como si no hay query no lo entienden:
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
SET @x=1
SET @y=1
while @x<=(SELECT COUNT(*) FROM #temp)
BEGIN
SELECT @anio=anio,@producto=producto FROM #temp WHERE rn=@x
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