У меня есть около 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
Что я делаю не так? Как я могу добиться желаемого результата? Спасибо.