PIVOT会满足我的要求吗?

时间:2015-04-27 22:39:11

标签: sql sql-server

请参阅下面的DDL:

CREATE TABLE Person (PersonNo int, Name varchar, Age int,address varchar(100))

是否可以使用单个查询以下列格式选择数据:

PersonNo Name
PersonNo Age
PersonNo Address

我需要一列来识别行的类型,例如名称。我想的越多,我就越不认为我能做到这一点。我目前正试图用一个支点来做这件事。

2 个答案:

答案 0 :(得分:2)

一种选择是使用UNION ALL(只需记住将int转换为varchar):

select personno, name as value, 'Name' as type
from person
union all 
select personno, CONVERT(varchar(10), age), 'Age' as type
from person
union all 
select personno, address, 'Address' as type
from person

另请注意 - 您应该为Name字段定义长度。原样,它只能包含一个字符。

答案 1 :(得分:1)

您正在寻找UNPIVOT,而不是PIVOT

SELECT
  PersonNo
 ,ColumnName
 ,ColumnValue
FROM Person t1
UNPIVOT(ColumnValue FOR ColumnName in ([Name],[Age],[Address])) t2