SQL查询问题
我有一个场景需要将行转换为列。我可能需要使用PIVOT,但我还没有弄明白这一点 以下是我所拥有内容的简化版本: 表:ContentAuthorSQL查询问题,sql,sql-server-2005,Sql,Sql Server 2005,我有一个场景需要将行转换为列。我可能需要使用PIVOT,但我还没有弄明白这一点 以下是我所拥有内容的简化版本: 表:ContentAuthor ContentID | AuthorName ---------------------- 1 | Joe 1 | John 1 | Mary 2 | John 2 | Dan 3 | Sam 我想要的是: ContentID | Author1 | Au
ContentID | AuthorName
----------------------
1 | Joe
1 | John
1 | Mary
2 | John
2 | Dan
3 | Sam
我想要的是:
ContentID | Author1 | Author2 | Author3 | Author4 | Author5
-----------------------------------------------------------------
1 | Joe | John | Mary | |
2 | John | Dan | | |
3 | Sam | | | |
在这一点上,我并不真正关心他们出现的顺序
任何帮助都将不胜感激。这将适用于每个
ContentId
最多5位作者,如果您需要允许任意数量,则需要使用
你需要一个数据透视表是完全正确的。但要使用它,您还需要知道需要多少列。如果您可以在进行查询之前创建一个动态SQL语句,那么这就可以了。非常感谢。(按…分区)上的行数()是我需要的关键。
;WITH ContentAuthor(ContentID, AuthorName) AS
(
SELECT 1,'Joe' UNION ALL
SELECT 1,'John' UNION ALL
SELECT 1,'Mary' UNION ALL
SELECT 2,'John' UNION ALL
SELECT 2,'Dan' UNION ALL
SELECT 3,'Sam'
),T AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ContentID ORDER BY (SELECT 0)) RN
FROM ContentAuthor
)
SELECT ContentID,
[1] AS Author1,
[2] AS Author2,
[3] AS Author3,
[4] AS Author4,
[5] AS Author5
FROM T
PIVOT(MAX(AuthorName) FOR RN IN ([1],[2],[3],[4],[5])) AS Pvt;