none
Pivot Dynamic a toda una fila. RRS feed

  • Debate general

  • Hola, la verdad estoy muy perdido con los pivot dinámicos.

    busque ejemplos y los modifique a mi situación, pero solo hace pivot a una columna y busco algo que lo haga a toda una fila me explicare mejor:

    ID   NOMBRE   APELLIDO   ORDEN   CODIGO_FACU   INSTRUMENT

    3     julio           perez           1              34622              rep_tre

    3     julio           perez           2             67577               trac_fec

    4     Mario         gomez         1            1234345             trey_ac

    4     Mario        Gomez          2             8999                 uin_op

     el pivot lo haria por medio de la columna ORDEN

    con el pivot me gustaria que terminaran asi:

    ID1   NOMBRE1  APELLIDO1   CODIGO_FACU1   NOMBRE2  APELLIDO2   CODIGO_FACU2   

     3        julio           perez              34622               julio           perez              67577         

     4       Mario         gomez              1234345          Mario          Gomez             8999           

     


    :)



    viernes, 16 de agosto de 2019 14:27

Todas las respuestas

  • Hola Augusto Mejía:

    Puedes leer de un conjunto su registro y el siguiente, y relacionarlos

    DECLARE @table TABLE
    (ID          INT, 
     NOMBRE      VARCHAR(25), 
     APELLIDO    VARCHAR(25), 
     ORDEN       INT, 
     CODIGO_FACU INT, 
     INSTRUMENT  VARCHAR(25)
    );
    INSERT INTO @table
    (ID, 
     NOMBRE, 
     APELLIDO, 
     ORDEN, 
     CODIGO_FACU, 
     INSTRUMENT
    )
    VALUES
    (3,  'julio',  'perez',  1,  34622,  'rep_tre'),
    (3,  'julio',  'perez',  2,  67577,  'trac_fec'),
    (4,  'Mario',  'gomez',  1,  1234345,  'trey_ac'),
    (4,  'Mario',  'Gomez',  2,  8999,  'uin_op');
    WITH CTE
         AS (SELECT T.ID, 
                    T.NOMBRE, 
                    T.APELLIDO, 
                    T.ORDEN, 
                    T.CODIGO_FACU, 
                    T.INSTRUMENT
             FROM @TABLE T)
         SELECT C1.ID AS ID1, 
                C1.NOMBRE AS NOMBRE1, 
                C1.APELLIDO AS APELLIDO1, 
                C1.CODIGO_FACU AS CODIGO_FACU1, 
                C2.NOMBRE AS NOMBRE2, 
                C2.APELLIDO AS APELLIDO2, 
                C2.CODIGO_FACU AS CODIGO_FACU2
         FROM CTE C1
              LEFT JOIN CTE C2 ON C1.ORDEN = (C2.ORDEN - 1)
                                  AND C1.NOMBRE = C2.NOMBRE
                                  AND C1.APELLIDO = C2.APELLIDO
         WHERE C1.ORDEN = 1;

    Salida

    También puedes usar 

    LAG/LEAD

    https://javifer2.wordpress.com/2018/09/11/lag-y-lead-siguiente-y-anterior/


    viernes, 16 de agosto de 2019 15:17
  • Genial, Muchas gracias y si tuviera en orden las variables 1,2,3,4 y 5 ¿solo agregaria otro left join?

    :)

    viernes, 16 de agosto de 2019 15:47
  • Deleted
    viernes, 16 de agosto de 2019 23:19
  • Hola:

    Genial, Muchas gracias y si tuviera en orden las variables 1,2,3,4 y 5 ¿solo agregaria otro left join?

    Si

    sábado, 17 de agosto de 2019 6:05
  • Deleted
    sábado, 17 de agosto de 2019 12:18
  • Hola Jose:

    Sin duda. Coincido con tu opinion

    sábado, 17 de agosto de 2019 19:40