此数据转换称为PIVOT
。在sql Server 2005+中,有一个函数可以执行此过程。:
select *
from
(
SELECT *
FROM mytable
) src
pivot
(
max(value)
for field in (first, last)
) piv
请参阅带有演示的SQL Fiddle。
或者,您可以将聚合函数与CASE
表达式一起使用:
select rowid,
max(case when field = 'first' then value end) first,
max(case when field = 'last' then value end) last
from MyTable
group by rowid
请参阅带有演示的SQL Fiddle。
您还可以在表上使用多个联接:
select t1.rowid,
t1.value first,
t2.value last
from mytable t1
left join mytable t2
on t1.rowid = t2.rowid
and t2.field = 'last'
where t1.field = 'first'
所有版本的结果都相同:
| ROWID | FIRST | LAST |
-------------------------
| 1 | neil | young |
| 2 | bob | dylan |
| 3 | tom | petty |