Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/08/2013, 12:50
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: Generar cuadros en bases de fechas

quizas esto te sirva:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. inicial datetime,
  4. final datetime,
  5. dia1 INT,
  6. )
  7.  
  8. INSERT INTO #temp VALUES (getdate(),dateadd(dd,2,getdate()))
  9. INSERT INTO #temp VALUES ('06/01/2013','06/15/2013')
  10.  
  11. DECLARE @total INT
  12. DECLARE @x INT
  13. DECLARE @query Nvarchar(MAX)
  14. SELECT @total=MAX(datediff(dd,inicial,final)) FROM #temp
  15. SELECT *,IDENTITY(INT,1,1) AS rn INTO #temp2 FROM #temp
  16. SET @x=1
  17. SET @query='create table ##valores(inicial datetime,final datetime,'
  18. while @x<=@total
  19. BEGIN
  20.  
  21. IF @x=@total   
  22. BEGIN
  23.   SET @query=@query + 'Dia' + CONVERT(VARCHAR(20),@x) + ' varchar(20))'
  24. END
  25. ELSE
  26. SET @query=@query + 'Dia' + CONVERT(VARCHAR(20),@x) + ' varchar(20),'
  27.  
  28. SET @x=@x+1
  29. END
  30. print @query
  31. EXEC sp_executesql @query
  32.  
  33. SELECT @total=COUNT(*) FROM #temp2
  34. SET @x=1
  35. SET @query=''
  36. DECLARE @y INT
  37. DECLARE @query2 AS Nvarchar(MAX)
  38. while @x<=@total
  39. BEGIN
  40. SET @y=1
  41. SET @query='insert into ##valores (inicial,final,'
  42. SET @query2='select inicial,final,'
  43.    while @y<=(SELECT datediff(dd,inicial,final) FROM #temp2 WHERE rn=@x)
  44.      BEGIN
  45.         IF @y=(SELECT datediff(dd,inicial,final) FROM #temp2 WHERE rn=@x)
  46.          BEGIN
  47.            SET @query=@query + 'dia' + CONVERT(VARCHAR(20),@y) + ')'
  48.            SET @query2=@query2 + CHAR(39) + '*' + CHAR(39) + ' from #temp2 where rn=' + CONVERT(VARCHAR(20),@x)
  49.          END
  50.         ELSE
  51.          BEGIN
  52.            SET @query=@query + 'dia' + CONVERT(VARCHAR(20),@y) + ','
  53.            SET @query2=@query2 + CHAR(39) + '*' + CHAR(39) + ','
  54.          END
  55.         SET @y=@y+1
  56.      END
  57. print @query
  58. print @query2
  59. SET @query=@query + ' ' + @query2
  60. EXEC sp_sqlexec @query
  61. SET @x=@x+1
  62. END
  63.  
  64. SELECT * FROM ##valores
  65.  
  66. DROP TABLE #temp2
  67. DROP TABLE ##valores

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me