我不确定为什么你认为你不能用 anUNPIVOT
和 a来完成这个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
请参阅SQL Fiddle with Demo。如果需要,这也可以动态执行。
编辑,如果需要保留列顺序,那么您可以使用类似这样的东西,它在row_number()
不使用 a的情况下应用order by
表中的一个列(这里是一篇关于使用非确定性行号的文章):
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;
请参阅带有演示的 SQL Fiddle