【发布时间】:2019-11-03 08:41:50
【问题描述】:
我在一列中有大约 28 条记录(这是动态的,有时是奇数,有时是偶数)。
想根据一个变量将它们分成多列。每列应该有 5 或 6 条记录。
注意:这5或6条记录是一个变量,应该改变。
输入表示例:
Col1
-----
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
所需的输出表将是:
Col1 col2 col3 col4 col5
-------------------------------------
A F K P U
B G L Q V
C H M R W
D I N S X
E J O T Y
Z
这是我尝试过的,这两个不同的查询提供了不同的结果:
select Col1
from Table1 where Col1 is not null
order by [col1] asc
--This provides all records
WITH CTE AS
(
SELECT [Col1],
(ROW_NUMBER() OVER (ORDER BY Col1) -1)%5 AS Col,
(ROW_NUMBER() OVER (ORDER BY Col1) -1)/5 AS Row
FROM Table1 where Col1 is not null
)
SELECT [0], [1], [2], [3], [4]
FROM CTE
PIVOT (MAX([COL1]) FOR Col IN ([0], [1], [2], [3], [4])) AS Pvt
ORDER BY Row
-- 在这种情况下记录丢失(当记录数很高时,记录数可以动态增加)
WITH CTE AS
(
SELECT [Col1],
(ROW_NUMBER() OVER (ORDER BY Col1) -1)%5 AS Col,
(ROW_NUMBER() OVER (ORDER BY Col1) -1)/5 AS Row
FROM Table1 where Col1 is not null
)
SELECT [0], [1]
FROM CTE
PIVOT (MAX([COL1]) FOR Col IN ([0], [1])) AS Pvt
ORDER BY Row
我做错了什么?我怎样才能达到所需的输出?谢谢。
【问题讨论】:
-
你说应该只有 5 或 6 行,这是否意味着如果你有 500 行,你需要 100 列?您的行数会有多少波动,它将如何影响您的预期结果?
-
这是一个例子。但是,我想要 5 列,每列 100 条记录。
标签: python sql-server tsql sql-server-2014 sql-server-2017