我有一个包含 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/