2010-10-12 60 views
3

我的數據庫允許使用用戶定義的字段(UDF),在選擇期間,我想將常規表字段與另一個表中的UDF結合起來。這是一個例子。如何將行轉換爲列?

Table Person 

Id FirstName LastName 
1 John  Smith 
2 Jim   Adams 

Table UDF 
PersonId FieldName FieldValue 
2  Age   28 
2  Status Available 

Result of query 
Id FirstName LastName Age Status 
1 John  Smith  NULL NULL 
2 Jim Adams  28 Avalable 

我使用SQL Server 2008和希望看到使用透視或UNPIVOT樣本。

感謝

+1

在實施這種設計之前,請花很長時間思考 - 由於很多原因,這只是一個壞主意。 (搜索「MUCK」表格,這裏有很好的討論,儘管網站需要免費註冊:http://www.sqlservercentral.com/articles/Advanced/lookuptablemadness/1464/) – 2010-10-12 13:53:27

回答

3
;With Person As 
(
SELECT 1 AS Id, 'John' AS FirstName, 'Smith' AS LastName UNION ALL 
SELECT 2 AS Id, 'Jim' AS FirstName, 'Adams' AS LastName 
) 
, 
UDF AS 
(
SELECT 2 PersonId, 'Age' FieldName, '28' FieldValue UNION ALL 
SELECT 2, 'Status', 'Available' 
) 
SELECT Id, FirstName, LastName, Age, Status 
FROM Person p 
LEFT OUTER JOIN UDF ON p.Id = UDF.PersonId 
PIVOT (MAX(FieldValue) FOR FieldName IN ([Age],[Status])) pvt 

如果您不知道預先需要的列,則可以動態生成此字符串並使用動態SQL。

+0

感謝Martin,只是爲了讓你知道Person Table增長幷包含比我在我的問題中陳述的前兩行更多的內容。 – Jama64 2010-10-12 13:58:24