我有一个包含 3 列的临时表,如下所示,

    JobID JobType        JobValue
    12    HR              Jesica
    23    MANAGER         Ravi
    5     MANAGER         Jacob
    60    EMPLOYEE      Kiruan
    45    MANAGER         Abidam
    27    HR              Kamsura
    21    MANAGER         Chio Bin
    87    EMPLOYEE      Gamanya
    22    HR              Pradeep
    56    HR              Hari
    67    EMPLOYEE      Om
    14    MANAGER         Kiran




My result table should be like


    JobID  HR   MANAGER  EMPLOYEE
    12
    23
    5
    60
    45
    27
    21
    87
    22
    56
    67
    14

Jobvalue 列值应该进入结果集。

我试过如下。

使用 distict Jobtype 行值创建了一个临时表。
然后使用 while 循环将 JobValue 列值插入到该表中。

但它看起来很脏的程序。

任何人都可以给我一个很好的建议来完成这个。

谢谢,

最佳答案

试试这个

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(jobtype)
                    from yourtable
                    group by jobtype
                    ORDER BY jobtype
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)')
        ,1,1,'')
--SELECT @cols
set @query = 'SELECT  JobID,' + @cols + ' from
             (
                select JobID, jobtype, jobvalue from yourtable
            ) x
            pivot
            (
                MAX(jobvalue)
                for jobtype in (' + @cols + ')
            ) p '

execute(@query)

关于sql-server-2005 - 不同的行值作为列 Sql Server,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17470499/

10-11 02:59