none
REPORTE UTILIZANDO PIVOT RRS feed

  • Pregunta

  • Hola Buenas, tardes agradezco la atencion necesito resolver este problema tengo la tabla de reportes de asistencia

    Usu_cod     Fecha_Reg

    _________ ______________________

    44827073    2017-03-13 13:14:50.000      
    44827073    2017-03-14 13:03:27.000
    44827073    2017-03-16 13:05:32.000
    44827073    2017-03-17 13:00:31.000
    44827073    2017-03-18 12:54:51.000
    44827073    2017-03-19 13:08:23.000
    45140169    2017-03-14 13:09:39.000
    45140169    2017-03-15 13:37:02.000
    45140169    2017-03-16 13:05:12.000
    45140169    2017-03-17 13:12:33.000
    45140169    2017-03-18 13:22:45.000
    45140169    2017-03-19 14:47:54.000

            Necesito hacer un pivot del minimo horario que llego estar persona

    Usu_cod  | 19-03-2017 |20-03-2017.......

    44827073

    45140169

    declare @cols varchar(max);
    declare @sql nvarchar(max);
    declare @fechaIni as Date; 
    set @fechaIni=CAST('2017-12-25' as date)
    declare @fechaFin as Date;
    set @fechaFin=CAST('2018-01-21' as date)
    set @cols='';
    WITH x as 
    (
    Select @fechaIni fecha
    union all
    select DATEADD(d,1,fecha)
    from x where fecha<@fechaFin
    )
    select @cols = stuff( (
    	SELECT '],[' + CONVERT(VARCHAR,fecha,112) FROM x 
    	for xml path('') ) ,1,2,'' ) + ']'
    	OPTION(MAXRECURSION 0)
     select @cols
    Set @sql = 'Select * From  
    (Select USUA_DNI,FECH_REG2 FROM AsistenciaPrueba) as T
     pivot
      (MIN(FECH_REG2) For FECH_REG2 in ('+@cols +')
    ) As P order by USUA_DNI;';
    
    Exec sp_executesql @sql;

    Sin embargo el resultado que obtengo es Valores nulos alguien me podria ayudar


    • Editado Al3xito2 sábado, 27 de enero de 2018 2:20
    sábado, 27 de enero de 2018 2:19

Respuestas

  • Podría ser problema del formato de las fechas. Tu variable @cols las está generando en este formato:

    [20171225],[20171226],...

    Pero el PIVOT va a comparar con esos valores el valor de FECH_REG2. Si este valor es DateTime en la tabla, va a tener que hacer una conversión a varchar para comparar con las cols, y esa conversión seguramente no la hará como yyyymmdd, por lo que no le va a coincidir ninguno de los resultados, y por eso todos son null.

    • Marcado como respuesta Al3xito2 sábado, 27 de enero de 2018 20:17
    sábado, 27 de enero de 2018 8:38

Todas las respuestas

  • Podría ser problema del formato de las fechas. Tu variable @cols las está generando en este formato:

    [20171225],[20171226],...

    Pero el PIVOT va a comparar con esos valores el valor de FECH_REG2. Si este valor es DateTime en la tabla, va a tener que hacer una conversión a varchar para comparar con las cols, y esa conversión seguramente no la hará como yyyymmdd, por lo que no le va a coincidir ninguno de los resultados, y por eso todos son null.

    • Marcado como respuesta Al3xito2 sábado, 27 de enero de 2018 20:17
    sábado, 27 de enero de 2018 8:38
  • Gracias segui su consejo y hice la conversion en la siguiente linea

    Set @sql = 'Select * From  
    (Select FECH_REG,CONVERT(VARCHAR,FECH_REG2,112) FECH_REG2,USUA_DNI FROM AsistenciaPrueba) as T
     pivot
      (MIN(FECH_REG) For FECH_REG2 in ('+@cols +')
    ) As P order by USUA_DNI;';
    Exec sp_executesql @sql;

    sábado, 27 de enero de 2018 20:19