Je ne sais pas pourquoi vous pensez que vous ne pouvez pas accomplir cela avec un UNPIVOT
et 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
Voir SQL Fiddle avec démo . Cela pourrait également être effectué dynamiquement si nécessaire.
Edit, si l'ordre des colonnes doit être conservé, vous pouvez utiliser quelque chose comme ça, qui applique le row_number()
sans utiliser de order by
sur l'une des colonnes de votre table (voici un article sur l'utilisation numéros de ligne non déterministes
):
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;
Voir SQL Fiddle avec démo