Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/08/2014, 14:26
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Incluir meses sin registros dentro de un año a partir del mes actual

Cita:
Iniciado por iislas Ver Mensaje
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 original
  1. CREATE TABLE #mitabla(
  2. Producto VARCHAR(04),
  3. Anio INT,
  4. Mes INT,
  5. Cantidad NUMERIC(16,8)
  6. )
  7. GO
  8.  
  9. INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2014,6,200)
  10. INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2014,7,100)
  11. INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2014,8,50)
  12. INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2014,9,300)
  13. INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2015,1,150)
  14. INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1001',2015,2,100)
  15. INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1002',2014,10,50)
  16. INSERT INTO #mitabla(Producto, Anio, Mes, Cantidad) VALUES('1002',2014,11,80)
  17.  
  18.  
  19. CREATE TABLE #meses
  20. (
  21. anio INT,
  22. mes INT,
  23. producto INT
  24. )
  25.  
  26.  
  27. SELECT DISTINCT anio,producto, IDENTITY(INT,1,1) AS rn INTO
  28. #temp FROM #mitabla
  29.  
  30. DECLARE @x INT
  31. DECLARE @y INT
  32. DECLARE @anio INT
  33. DECLARE @producto INT
  34. SET @x=1
  35. SET @y=1
  36. while @x<=(SELECT COUNT(*) FROM #temp)
  37. BEGIN
  38.     SELECT @anio=anio,@producto=producto FROM #temp WHERE rn=@x
  39.     while @y<=12
  40.         BEGIN
  41.             INSERT INTO #meses VALUES (@anio,@y,@producto)
  42.             SET @y=@y+1
  43.         END
  44.     SET @y=1
  45. SET @x=@x+1
  46. END
  47.  
  48. SELECT t2.producto,t2.anio,t2.mes,isnull(t1.cantidad,0) AS cantidad FROM #mitabla AS t1
  49. RIGHT JOIN #meses AS t2 ON (t1.Mes=t2.mes AND t1.Anio=t2.anio)
  50.  
  51.  
  52. DROP TABLE #temp
  53. DROP TABLE #meses
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me