Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

pivô sql com colunas dinâmicas


Como você tem um número definido de funcionários em sua lista (do seu comentário) você não precisa que ela seja dinâmica. Um pivô regular deve fazer o truque:
select [Company Name],Emp1,Emp2,Emp3,Emp4  from (
    SELECT
        [Company Name],
        [Employee Name],
        'Emp' + cast(ROW_NUMBER() OVER (PARTITION BY [Comp ID] ORDER BY  [Design ID], [Emp ID] desc) as char(2)) as RowNum
    FROM
    (
        SELECT emp.[Emp ID],
            comp.[Company Name],
            design.[Designation],
            emp.[Design ID],
            emp.[comp id],
            emp.[Employee Name],
            ROW_NUMBER() OVER (PARTITION BY emp.[Comp ID], emp.[Design ID] ORDER BY emp.[Comp ID] desc, emp.[Design ID] desc, emp.[Emp ID] desc) RowNum
        from employee as emp
            join designation as design on design.[Design ID]=emp.[Design ID]
            join company as comp on comp.[Comp ID]=emp.[Comp ID]
    ) a
    WHERE RowNum <=2
) as pivotdata
pivot (max([Employee Name]) for [RowNum] in (Emp1,Emp2,Emp3,Emp4)) as P