如何将行转换为列?

时间:2010-10-12 13:40:02

标签: sql-server-2005

我的数据库允许用户定义字段(UDF),在select期间,我想将常规表字段与另一个表中的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,并希望使用Pivot或UnPivot查看示例。

由于

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:2)

不幸的是,您可能要事先知道列使用PIVOT

或者您必须动态创建

T-SQL Dynamic Pivot Table Examples for SQL Server 2008