请参阅下面的DDL:
CREATE TABLE Person (PersonNo int, Name varchar, Age int,address varchar(100))
是否可以使用单个查询以下列格式选择数据:
PersonNo Name
PersonNo Age
PersonNo Address
我需要一列来识别行的类型,例如名称。我想的越多,我就越不认为我能做到这一点。我目前正试图用一个支点来做这件事。
答案 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