将单个列数据拆分为多个列

时间:2018-06-14 10:26:47

标签: sql-server

MS SQL Server:

我有一张表格如下:

CREATE TABLE #Coltable
(
    Name VARCHAR(10)
)

INSERT INTO #Coltable
VALUES
('P'),
('Q'),
('R'),
('S'),
('T'),
('U'),
('V'),
('W'),
('X')

想要结果如下:

col1 col2  col3

P     Q     R
S     T     U
V     W     X

必须将第一个记录(P)插入第一行第1列(Col1), 第二行(Q)必须插入第二列(COL2), 第三行(R)必须插入第三列(col3), 第四行(S)必须作为下一行插入第一列(col1), 第五行(T)必须插入第二列(col2)作为下一行,并且像这样继续进行。

1 个答案:

答案 0 :(得分:0)

将行排序放在ORDER BY的{​​{1}}内OVER,以便在旋转之前正确排序记录。

ROW_NUMBER()

此解决方案计算每个行的升序整数排名,然后使用除法(WITH Data AS ( SELECT C.Name, Ordering = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM #Coltable AS C ), PrePivot AS ( SELECT D.Name, RowGroup = (D.Ordering - 1) / 3, ColumnPosition = 'col' + CONVERT(VARCHAR(10), ((D.Ordering - 1) % 3) + 1) FROM Data AS D ) SELECT P.col1, P.col2, P.col3 FROM PrePivot AS V PIVOT ( MAX(V.Name) FOR ColumnPosition IN ([col1], [col2], [col3]) ) AS P )乘以3我们可以将每个集合在一起并使用mod(/)乘以3我们可以知道哪个列将结束该值。最后在整个组计数器中转动值(但不要显示组计数器!)。