Ik weet niet zeker waarom je denkt dat je dit niet kunt bereiken met een UNPIVOT
en een 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
Zie SQL Fiddle met demo . Indien nodig kan dit ook dynamisch worden uitgevoerd.
Bewerken, als de kolomvolgorde behouden moet blijven, dan kun je zoiets als dit gebruiken, waarbij de row_number()
wordt toegepast zonder een order by
. te gebruiken op een van de kolommen in uw tabel (hier is een artikel over het gebruik van niet-deterministische rijnummers
):
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;