2011-04-22 151 views
0

我有一個場景,我需要將行轉換爲列。我可能需要使用PIVOT,但我無法弄清楚這一點。SQL查詢問題

這裏是什麼,我有一個簡化版: 表: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  |   |   |   | 

在這一點上我真的不關心爲了它們出現。

任何幫助將不勝感激。

+0

你是絕對正確需要一個數據透視表。但要使用一個你也需要知道你需要多少列。如果您可以在進行查詢之前創建動態SQL語句,那麼這可以正常工作。 – Genzume 2011-04-22 21:44:17

回答

1

這將每ContentId高達5名作者的工作,如果你需要允許任意金額,那麼你將需要使用dynamic 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; 
+0

非常感謝。 ROW_NUMBER()OVER(PARTITION BY ...是我需要的關鍵。 – 2011-04-22 23:27:16