SQL查询问题

SQL查询问题,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

我有一个场景需要将行转换为列。我可能需要使用PIVOT,但我还没有弄明白这一点

以下是我所拥有内容的简化版本: 表:ContentAuthor

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;