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

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 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 producto, IDENTITY(INT,1,1) AS rn INTO
  28. #temp
  29.  FROM #mitabla ORDER BY producto
  30.  
  31. DECLARE @x INT
  32. DECLARE @y INT
  33. DECLARE @z INT
  34. DECLARE @anio INT
  35. DECLARE @producto INT
  36. DECLARE @actual INT
  37. SET @actual=datepart(yyyy,getdate())
  38. SET @x=1
  39. SET @y=1
  40. SET @z=1
  41. SET @anio=@actual
  42. while @x<=(SELECT COUNT(*) FROM #temp)
  43. BEGIN
  44.     SELECT @producto=producto FROM #temp WHERE rn=@x
  45.     SET @y=DATEPART(mm,getdate())
  46.     while @z<=12
  47.         BEGIN
  48.             INSERT INTO #meses VALUES (@anio,@y,@producto)
  49.             SET @y=@y+1
  50.             IF @y=12
  51.                 BEGIN
  52.                     SET @y=1
  53.                     SET @anio=@anio+1
  54.                 END
  55.             SET @z=@z+1
  56.         END
  57.     SET @y=1
  58.     SET @z=1
  59.     SET @anio=@actual
  60. SET @x=@x+1
  61. END
  62.  
  63. SELECT t2.producto,t2.anio,t2.mes,isnull(t1.cantidad,0) AS cantidad FROM #mitabla AS t1
  64. RIGHT JOIN #meses AS t2 ON (t1.Mes=t2.mes AND t1.Anio=t2.anio AND t1.Producto=t2.producto)
  65.  
  66.  
  67.  
  68. DROP TABLE #temp
  69. DROP TABLE #meses
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me