No estoy seguro de por qué crees que no puedes lograr esto con un UNPIVOT
y un 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
Consulte SQL Fiddle con demostración . Esto también podría realizarse dinámicamente si es necesario.
Edite, si es necesario mantener el orden de las columnas, entonces puede usar algo como esto, que aplica el row_number()
sin usar un order by
en una de las columnas de su tabla (aquí hay un artículo sobre el uso números de fila no deterministas
):
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;
Consulte SQL Fiddle con demostración