locked
¿Como generar columnas dinamicas en base a un rango de fechas? RRS feed

  • Pregunta

  •  Hola a todos,  he creado un procedimiento almacenado con un parámetro fecha(Mes y año) que devuelve una consulta con encabezados dinámicos de fechas de los días de todo el mes, pero lo que deseo es pasar un rango de fechas y me genere los días de ese rango de fechas en los encabezados en vez de un mes completo.

    Aquí esta mi procedimiento almacenado.

    Lo que deseo es que las fechas generadas para las columnas sean por un rango de fechas y no por un mes completo.Estoy usando pivot para pasarle las fechas dinámicas.


    CREATE PROCEDURE [dbo].[PA_Control_horas]

    @MesAño VARCHAR(6)--, --MesAño

    as

    begin

    DECLARE @SQLDynamic NVARCHAR(MAX)-- STRING QUE CONTENDRA TODO

    DECLARE @FinalDate NVARCHAR(50)=right(@MesAño,4)+'-'+'01-'+left(@MesAño,2)-- creamos el año + el mes + el primer dia

    --obtiene el primer dia del mes;WITH CTE_DAY_Recursive AS

    (SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @FinalDate), 0)  AS date)AS DayDINAMIC --Creamos el primer dia

    UNION ALL

    SELECT DATEADD(DAY,1,DayDINAMIC)--agregamos un dia mas

    FROM CTE_DAY_Recursive

    Where DATEADD(DAY,1,DayDINAMIC)<=CAST(DATEADD(MONTH,DATEDIFF(MONTH,0,@FinalDate)+1,0)-1 AS DATE)--verificamos que no se pase de la fecha del mes)

    SELECT  @SQLDynamic=COALESCE(@SQLDynamic+',','')+'['+CAST(DayDINAMIC    AS nvarchar(20))+']' 

    FROM CTE_DAY_Recursive  --Obtenemos los registros 

    DECLARE @SQLFULL NVARCHAR(MAX)='

    select * from

    (

    select     Id_Colaborador as ''DNI'',   

    Nombre_Colaborador as ''COLABORADOR'',   

    Id_Unidad_Organizativa as ''PROYECTO UO'',

    Nro_Proyecto_Registro as ''PROYECTO ASIGNADO'',   

    Fecha_Registro,   

    sum(Hora_Registro) as ''Hora_Registro''   

    from Sigeri   

    group by Id_Colaborador,Nombre_Colaborador,Id_Unidad_Organizativa,Nro_Proyecto_Registro,Fecha_Registro)s

    pivot(   

    max(Hora_Registro) for[Fecha_Registro] in --(select Fecha_Registro FROM Sigeri)

    ('+@SQLDynamic+') --Le pasamos los registros)p'

    EXEC(@SQLFULL)

    end


    lunes, 21 de octubre de 2019 15:39

Respuestas

Todas las respuestas