如何将行转换为列?

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,并希望看到一个使用 Pivot 或 UnPivot 的示例。

谢谢


1
在你实现这种设计之前,认真考虑很长时间——因为出于很多原因,这只是一个糟糕的想法。(搜索“MUCK”表,在这里有很好的讨论,尽管该网站需要免费注册:http://www.sqlservercentral.com/articles/Advanced/lookuptablemadness/1464/) - Philip Kelley
2个回答

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。


谢谢Martin,只是想让您知道,Person表格正在增长,并且包含的行数超过我在问题中提到的前两行。 - Jama64

2

谢谢Astander,除了使用Pivot解决问题,我还有其他选择吗? - Jama64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接