Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Generar cuadros en bases de fechas

Estas en el tema de Generar cuadros en bases de fechas en el foro de SQL Server en Foros del Web. Muy buenas, espero haber sido descriptivo con el titulo del tema. Iré al grano, estoy tratando de realizar algo en mi trabajo que no logro ...
  #1 (permalink)  
Antiguo 19/08/2013, 08:59
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Generar cuadros en bases de fechas

Muy buenas, espero haber sido descriptivo con el titulo del tema.
Iré al grano, estoy tratando de realizar algo en mi trabajo que no logro conseguirlo.

Estoy tratando de generar la cantidad de días en una grilla.
Por ejemplo, si tomo del 1 de Julio al 5 de Julio, tengo que generar (me imagino pivotear) cuadros, o colocarle un * asterisco, o un mas +, el simbolo que sea me da lo mismo.
Me explico mediante un ejemplo.

Imaginemos dos campos fecha:
Fecha Inicial y Fecha Final.

Ejemplo, pongo del 1 de Julio al 5 de Julio y genero 5 asteriscos:
(imagine los guiones que no existen, imaginen que son espacios en blanco, ya que no pude hacer la separación para que calcen los asteriscos bajo los numeros)

Fecha Inicial | Fecha Final | 1 | 2 | 3 | 4 | 5 |
01/07/2013 05/07/2013- * - * - * - * - *

O pueden ser diferentes registros, la cosa es que manda la fecha inicial y final que se ingresen, y los campos donde van los asteriscos se generen dinamicamente.

Fecha Inicial | Fecha Final | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
01/07/2013 05/07/2013- * - * - * - * - *
06/07/2013 10/07/2013 ---------------*- * - * - * - *
03/07/2013 05/07/2013 ------ *- * - *

Espero alguien pueda hecharme una mano ya que estoy peleando este tema para un trabajo en la empresa.
Cualquier idea o sugerencia es bien recibida.
Gracias por adelantado!
  #2 (permalink)  
Antiguo 19/08/2013, 12:50
Avatar de 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
  #3 (permalink)  
Antiguo 20/08/2013, 09:17
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Generar cuadros en bases de fechas

Otra solución, distinta de la de Libras:

Código SQL:
Ver original
  1. IF Object_ID('tempdb..#T','U') IS NOT NULL DROP TABLE #T;
  2. CREATE TABLE #T(ID INT PRIMARY KEY,
  3.                 inicial DateTime,
  4.                 final DateTime);
  5.  
  6. INSERT
  7. INTO    #T
  8. VALUES  (1,'20130701','20130705'),
  9.         (2,'20130706','20130710'),
  10.         (3,'20130703','20130705');
  11.  
  12. IF Object_ID('tempdb..#Nm','U') IS NOT NULL DROP TABLE #Nm;
  13. WITH MinMax AS
  14. (SELECT MIN(inicial) MinFecha,
  15.         MAX(final) MaxFecha
  16. FROM    #T),
  17. Nm AS
  18. (SELECT 1 N,
  19.         MinFecha Fecha
  20. FROM    MinMax
  21. UNION ALL
  22. SELECT  Nm.N+1 N,
  23.         Nm.Fecha+1 Fecha
  24. FROM    Nm,
  25.         MinMax MM
  26. WHERE   Nm.Fecha<MM.MaxFecha)
  27. SELECT  *
  28. INTO    #Nm
  29. FROM    Nm;
  30.  
  31. DECLARE @SQL VARCHAR(MAX);
  32. SELECT  @SQL=IsNull(@SQL+','+CHAR(13),'')+CHAR(9)+CHAR(9)+'Max(Case When N='+CAST(N AS VARCHAR)+' Then ''*'' Else '''' End) ['+RIGHT('0'+CAST(N AS VARCHAR),2)+']'
  33. FROM    #Nm;
  34.  
  35. SET     @SQL='Select    ID,
  36.         Max(inicial) inicial,
  37.         Max(final) final,'+CHAR(13)+
  38.         @SQL+CHAR(13)+
  39.         'From   #T
  40. Inner Join #Nm
  41.         On #Nm.Fecha Between #T.inicial And #T.final
  42. Group By ID;';
  43. Print   @SQL;
  44. EXEC(@SQL);
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Última edición por GeriReshef; 20/08/2013 a las 09:24
  #4 (permalink)  
Antiguo 20/08/2013, 09:27
Avatar de 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

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

Etiquetas: bases, cuadros, fecha, registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:12.