2012-07-09 69 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