2015-04-27 59 views
0

請參閱下面的DDL:PIVOT會符合我的要求嗎?

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

是否可以使用單個查詢以選擇以下格式的數據:

PersonNo Name 
PersonNo Age 
PersonNo Address 

我需要一欄,例如確定行的類型名稱。我越想越想越能做到這一點。我目前正試圖用一個關鍵點來做到這一點。

回答

2

一種選擇是使用UNION ALL(只記得轉換的intvarchar):

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字段。因爲它只能包含一個字符。

+0

是的,我認爲這就是我一直在尋找。 +1。如果有更多的答案,我會等到明天再接受。 – w0051977

1

你正在尋找一個UNPIVOT,而不是PIVOT

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

謝謝。我會在早上測試這個,回到你身邊。 – w0051977

+0

此選項可以工作,但您需要使用子查詢並將列轉換爲相同的數據類型。 – sgeddes