0

如果我有四列称为Person1,Person2和.Person3Value

是否可以将所有三个 Person 列转换为如下所示的一个(?):

Person Value
-------------------
Person1 10

Person1 50 

Person2 60

Person3 0

我在用SQL Server 2008.

4

1 回答 1

0

将多列转换为多行的过程称为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)
于 2013-06-17T11:12:02.923 回答