2012-07-09 68 views
5

我想將單列結果從查詢拆分成4列:SQL單柱拆分成多發列

樣品來源:(Select [FirstName from User
彼得
瑪麗
約翰
蒂娜
卡爾

比爾
莎拉

我想是這樣的:

Column1 Column2 Column3 Column4 
Peter  Mary  John  Tina 
Carl  Jane  Bill  Sarah 

回答

8

您需要有一個獨特的專欄ORDER BY得到確定性的結果,但沿着這些線應該工作。

;WITH T 
    AS (SELECT [FirstName], 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1)/4 AS Row, 
       (ROW_NUMBER() OVER (ORDER BY (SELECT 0)) - 1) % 4 AS Col 
     FROM [User]) 
SELECT [0] AS Column1, 
     [1] AS Column2, 
     [2] AS Column3, 
     [3] AS Column4 
FROM T PIVOT (MAX(name) FOR Col IN ([0], [1], [2], [3])) P 
ORDER BY Row 
+0

+1,但我認爲col的row_number()也需要'-1'。 – 2012-07-09 08:51:32

+0

謝謝!我確實使用了具有不同Modulus並加入rownums的4張臨時表,但CTE看起來更好! – callisto 2012-07-09 08:54:54

+0

@NikolaMarkovinović - 確實,或者在輸出「1,2,3,0,1,2,3,0」時改變別名需求。根據您的建議進行編輯。 – 2012-07-09 08:55:37

1

在這裏,您有選項噸,尋找一個更適合你的情況: Create columns from list of values

上的鏈接引導到even more information

+0

我查看了鏈接,但它只顯示瞭如何構建包含多行值的單個列。我想將1列分成4列 – callisto 2012-07-09 08:34:23

+0

是的,你是對的,我只是編輯了我的答案,也許它應該是一個評論,而不是一個完整的答案,因爲提供的鏈接給你很多的信息,但不是你的確切答案題。 – Yaroslav 2012-07-09 08:36:12