如果我有四列称为Person1
,Person2
和.Person3
Value
是否可以将所有三个 Person 列转换为如下所示的一个(?):
Person Value
-------------------
Person1 10
Person1 50
Person2 60
Person3 0
我在用SQL Server 2008.
如果我有四列称为Person1
,Person2
和.Person3
Value
是否可以将所有三个 Person 列转换为如下所示的一个(?):
Person Value
-------------------
Person1 10
Person1 50
Person2 60
Person3 0
我在用SQL Server 2008.
将多列转换为多行的过程称为UNPIVOT:
select person, val
from yourtable
unpivot
(
val
for person in (Person1, Person2, Person3)
) unpiv;
这也可以使用 UNION ALL 查询来编写:
select 'person1' as person, person1 as val
from yourtable
union all
select 'person2' as person, person2 as val
from yourtable
union all
select 'person3' as person, person3 as val
from yourtable;
由于您使用的是 SQL Server 2008,因此您还可以将 CROSS APPLY 与 VALUES 子句一起使用:
select c.person, c.val
from yourtable
cross apply
(
values
('person1', person1),
('person2', person2),
('person3', person3)
) c (person, val)