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