none
pivote sql server transponer nombres RRS feed

  • Pregunta

  • buenas noches, solicito de su apoyo para que me orienten un poco les explico mi caso, necesito hacer un pivote en el cual tengo una tabla con 10000 registros la estructura es la siguiente

    nombre_empleado    nombre_patrón

    alan                             juan

    Jorge                           juan

    esteban                       diego

    oscar                           maria

    rosa                             mari

    ....asi van hasta los 10000

    necesito hacer un pivote para para que quede acomode la información de esta forma

    nombre_empleado        diego          maria         mari      juan   ...........los nombres de los jefes son mas de 500

    alan                                 x 

    Jorge                                                                  x

    esteban                            x

    oscar                                                                              x

    rosa                                                x

    espero puedan ayudarme, saludos



    • Editado killer1923 jueves, 26 de enero de 2017 1:12 ayuida
    jueves, 26 de enero de 2017 1:07

Respuestas

  • Hola vas a tener que usa sql dinámico, y pivot en sql  ,algo como esto

    IF OBJECT_ID('tempdb..#empleados') is not null
    BEGIN
    DROP TABLE #empleados;
    END
    
    create table #empleados
    ( patron varchar(250),
    empleado varchar(250)
    )
    INSERT INTO #empleados(patron,empleado) values('alan','juan')
    INSERT INTO #empleados(patron,empleado) values('jorge','juan')
    INSERT INTO #empleados(patron,empleado) values('oscar','maria')
    INSERT INTO #empleados(patron,empleado) values('rosa','mari')
    
    DECLARE @columns varchar(MAX);
    DECLARE @sql nvarchar(MAX);
    SET @columns = STUFF(
    (
    SELECT
    ',' + QUOTENAME(LTRIM(patron))
    FROM
    (SELECT DISTINCT patron
    FROM #empleados
    ) AS T
    
    FOR XML PATH('')
    ), 1, 1, '');
    
    SET @sql = N'
    SELECT
    * 
    FROM
    (  
    SELECT  empleado,  patron  ,''X'' x
    FROM #empleados 
    ) AS T
    PIVOT 
    (
     max(x) 
    FOR patron IN (' + @columns + N')
    ) AS P '; 
    
    EXEC sp_executesql @sql;
    
    --SELECT  empleado, case when patron is not null then '''' end  as patron


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.



    • Editado Augusto1982 jueves, 26 de enero de 2017 2:53
    • Propuesto como respuesta Joyce_ACModerator jueves, 26 de enero de 2017 15:20
    • Marcado como respuesta killer1923 jueves, 26 de enero de 2017 15:38
    jueves, 26 de enero de 2017 2:51

Todas las respuestas

  • Hola vas a tener que usa sql dinámico, y pivot en sql  ,algo como esto

    IF OBJECT_ID('tempdb..#empleados') is not null
    BEGIN
    DROP TABLE #empleados;
    END
    
    create table #empleados
    ( patron varchar(250),
    empleado varchar(250)
    )
    INSERT INTO #empleados(patron,empleado) values('alan','juan')
    INSERT INTO #empleados(patron,empleado) values('jorge','juan')
    INSERT INTO #empleados(patron,empleado) values('oscar','maria')
    INSERT INTO #empleados(patron,empleado) values('rosa','mari')
    
    DECLARE @columns varchar(MAX);
    DECLARE @sql nvarchar(MAX);
    SET @columns = STUFF(
    (
    SELECT
    ',' + QUOTENAME(LTRIM(patron))
    FROM
    (SELECT DISTINCT patron
    FROM #empleados
    ) AS T
    
    FOR XML PATH('')
    ), 1, 1, '');
    
    SET @sql = N'
    SELECT
    * 
    FROM
    (  
    SELECT  empleado,  patron  ,''X'' x
    FROM #empleados 
    ) AS T
    PIVOT 
    (
     max(x) 
    FOR patron IN (' + @columns + N')
    ) AS P '; 
    
    EXEC sp_executesql @sql;
    
    --SELECT  empleado, case when patron is not null then '''' end  as patron


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala. Solo dejo en el foro mis post si fueron útiles , de lo contrario y por mantener el orden los borro. Saludos. Lima-Perú.



    • Editado Augusto1982 jueves, 26 de enero de 2017 2:53
    • Propuesto como respuesta Joyce_ACModerator jueves, 26 de enero de 2017 15:20
    • Marcado como respuesta killer1923 jueves, 26 de enero de 2017 15:38
    jueves, 26 de enero de 2017 2:51
  • gracias Augusto1982 combinando tu código y realizando otros ajuste , por fin termine .... gracias por tu ayuda saludos 
    jueves, 26 de enero de 2017 15:49