Ich bin mir nicht sicher, warum Sie denken, dass Sie dies nicht mit einem UNPIVOT
erreichen können und ein 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
Siehe SQL Fiddle mit Demo . Dies könnte bei Bedarf auch dynamisch durchgeführt werden.
Bearbeiten Sie, wenn die Spaltenreihenfolge beibehalten werden muss, können Sie so etwas verwenden, das die row_number()
anwendet ohne order by
zu verwenden in einer der Spalten in Ihrer Tabelle (hier ist ein Artikel über die Verwendung von nicht deterministische Zeilennummern
):
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;
Siehe SQL-Fiddle mit Demo