Не съм сигурен защо смятате, че не можете да постигнете това с UNPIVOT
и PIVOT
:
select [1], [2], [3], [4], [5]
from
(
select *
from
(
select col1, col2, col3,
row_number() over(order by col1) rn
from yourtable
) x
unpivot
(
val for col in (col1, col2, col3)
) u
) x1
pivot
(
max(val)
for rn in ([1], [2], [3], [4], [5])
) p
Вижте SQL Fiddle с демонстрация . Това може да се извърши и динамично, ако е необходимо.
Редактирайте, ако редът на колоните трябва да се запази, тогава можете да използвате нещо подобно, което прилага row_number()
без да използвате order by
в една от колоните във вашата таблица (ето една статия за използването недетерминирани номера на редове
):
select [1], [2], [3], [4], [5]
from
(
select *
from
(
select col1, col2, col3,
row_number()
over(order by (select 1)) rn
from yourtable
) x
unpivot
(
val for col in (col1, col2, col3)
) u
) x1
pivot
(
max(val)
for rn in ([1], [2], [3], [4], [5])
) p;
Вижте SQL Fiddle с демонстрация