3

我有一个带有 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 列值插入到该表中。

但它看起来很肮脏的程序。

谁能给我一个很好的建议来完成这个。

谢谢,

4

2 回答 2

3

您应该能够使用PIVOT函数来获得结果:

select jobid, hr, manager, employee
from yourtable
pivot
(
  max(jobvalue)
  for jobtype in (hr, manager, employee)
) piv;

请参阅SQL Fiddle with Demo

如果你想jobvalue在每个下面列出jobType而不显示 jobid,那么你可以使用:

select hr, manager, employee
from
(
  select jobtype, jobvalue,
    row_number() over(partition by jobtype order by jobid) rn
  from yourtable
) d
pivot
(
  max(jobvalue)
  for jobtype in (hr, manager, employee)
) piv;

请参阅带有演示的 SQL Fiddle

于 2013-07-05T04:47:49.143 回答
2

尝试这个

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)
于 2013-07-05T06:21:49.237 回答