none
Columnas en filas agrupadas RRS feed

  • Pregunta

  • Estimados, tengo el siguiente problema...

    Tengo una tabla que al realizar una consulta simple me da el siguiente resultado

    Pero yo quiero que el resultado sea así...

    Es posible???

    Estuve investigando el PIVOT pero por más que intento no me funciona, creo que no logro entenderlo.

    Agradecido de antemano por cualquier ayuda que me puedan prestar.

    martes, 26 de noviembre de 2019 15:11

Respuestas

  • Gabriel, prueba

    -- código #1 v2
    with Consulta as (
    SELECT [año], mes, rut_trabajador,
           cast (sueldo_base as sql_variant) as [sueldo base],
           cast (dias_trabajados as sql_variant) as [dias trabajados],
           cast (remu_imponible as sql_variant) as [remu imponible],
           cast (remu_no_imponible as sql_variant) as [remu no imponible],
           cast (remu_total as sql_variant) as [remu total]
      from tabla
    )  
    SELECT [año], mes, rut_trabajador, detalle, monto
      from Consulta
           unpivot (monto for detalle in ([sueldo base], [remu imponible], [remu no imponible], [remu total], [dias trabajados])) as N;




    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como respuesta Gabriel Núñez martes, 26 de noviembre de 2019 16:06
    • Editado José Diz martes, 26 de noviembre de 2019 16:14
    martes, 26 de noviembre de 2019 16:04
  • Hola, necesitas usar unpivot

    create table #pruebas
    (
    año int,
    mes int,
    rut_trabajador varchar(20),
    dias_trabajados int,
    sueldo_base     decimal(10,2),
    remu_imponible  decimal(10,2),
    remu_no_imponible decimal(10,2),
    remu_total         decimal(10,2)
    
    )
    
    insert into #pruebas
    values
    (2019,10,'11.111.111-1',30,525481,588614,83615,672229)
    
    select * from #pruebas
    
    select año,mes,rut_trabajador,monto,detalle
    FROM   
       (SELECT año,mes,rut_trabajador,cast(dias_trabajados as decimal(10,2)) as dias_trabajados,sueldo_base,remu_imponible,remu_no_imponible,remu_total
       FROM #pruebas) p  
    UNPIVOT  
       (monto FOR detalle IN   
          (sueldo_base,remu_imponible,remu_no_imponible,remu_total,dias_trabajados)
    )AS unpvt;
    
    drop table #pruebas


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    martes, 26 de noviembre de 2019 16:18

Todas las respuestas

  • Gabriel, prueba

    -- código #1 v2
    with Consulta as (
    SELECT [año], mes, rut_trabajador,
           cast (sueldo_base as sql_variant) as [sueldo base],
           cast (dias_trabajados as sql_variant) as [dias trabajados],
           cast (remu_imponible as sql_variant) as [remu imponible],
           cast (remu_no_imponible as sql_variant) as [remu no imponible],
           cast (remu_total as sql_variant) as [remu total]
      from tabla
    )  
    SELECT [año], mes, rut_trabajador, detalle, monto
      from Consulta
           unpivot (monto for detalle in ([sueldo base], [remu imponible], [remu no imponible], [remu total], [dias trabajados])) as N;




    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como respuesta Gabriel Núñez martes, 26 de noviembre de 2019 16:06
    • Editado José Diz martes, 26 de noviembre de 2019 16:14
    martes, 26 de noviembre de 2019 16:04
  • Gabriel, prueba

    -- código #1
    SELECT [año], mes, rut_trabajador, detalle, monto
      from tabla
           unpivot (monto for detalle in ([sueldo_base], [remu_imponible], [remu_no_imponible],
    [remu_total], [dias_trabajados])) as N;



    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Funcionó perfecto José, muchas gracias por tu ayuda.

    :)

    martes, 26 de noviembre de 2019 16:06
  • Gabriel, he cambiado el código #1 para asegurar de que no ocurra el error
    The type of column "___" conflicts with the type of other columns specified in the UNPIVOT list.

    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    martes, 26 de noviembre de 2019 16:16
  • Hola, necesitas usar unpivot

    create table #pruebas
    (
    año int,
    mes int,
    rut_trabajador varchar(20),
    dias_trabajados int,
    sueldo_base     decimal(10,2),
    remu_imponible  decimal(10,2),
    remu_no_imponible decimal(10,2),
    remu_total         decimal(10,2)
    
    )
    
    insert into #pruebas
    values
    (2019,10,'11.111.111-1',30,525481,588614,83615,672229)
    
    select * from #pruebas
    
    select año,mes,rut_trabajador,monto,detalle
    FROM   
       (SELECT año,mes,rut_trabajador,cast(dias_trabajados as decimal(10,2)) as dias_trabajados,sueldo_base,remu_imponible,remu_no_imponible,remu_total
       FROM #pruebas) p  
    UNPIVOT  
       (monto FOR detalle IN   
          (sueldo_base,remu_imponible,remu_no_imponible,remu_total,dias_trabajados)
    )AS unpvt;
    
    drop table #pruebas


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    martes, 26 de noviembre de 2019 16:18