Ver Mensaje Individual
  #8 (permalink)  
Antiguo 18/08/2014, 14:44
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, 3 meses
Puntos: 774
Respuesta: Incluir meses sin registros dentro de un año a partir del mes actual

y para los años anteriores empieza en 1??? Mientras mas claro el requerimiento mejor la respuesta ;)

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. DECLARE @actual INT
  35. SET @actual=datepart(yyyy,getdate())
  36. SET @x=1
  37. SET @y=1
  38. while @x<=(SELECT COUNT(*) FROM #temp)
  39. BEGIN
  40.     SELECT @anio=anio,@producto=producto FROM #temp WHERE rn=@x
  41.     IF @anio=@actual   
  42.         SET @y=datepart(mm,getdate())
  43.     while @y<=12
  44.         BEGIN
  45.             INSERT INTO #meses VALUES (@anio,@y,@producto)
  46.             SET @y=@y+1
  47.         END
  48.     SET @y=1
  49. SET @x=@x+1
  50. END
  51.  
  52. SELECT t2.producto,t2.anio,t2.mes,isnull(t1.cantidad,0) AS cantidad FROM #mitabla AS t1
  53. RIGHT JOIN #meses AS t2 ON (t1.Mes=t2.mes AND t1.Anio=t2.anio)
  54.  
  55.  
  56. DROP TABLE #temp
  57. DROP TABLE #meses

aqui el query con el cambio que mencionas ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me