Jeg er usikker på, hvorfor du tror, du ikke kan opnå dette med en UNPIVOT
og en 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
Se SQL Fiddle with Demo . Dette kan også udføres dynamisk, hvis det er nødvendigt.
Rediger, hvis kolonnerækkefølgen skal bevares, så kan du bruge noget som dette, som anvender row_number()
uden at bruge en order by
på en af kolonnerne i din tabel (her er en artikel om at bruge ikke-deterministiske rækkenumre
):
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;