Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/08/2013, 09:17
GeriReshef
 
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