Tôi không rõ tại sao bạn nghĩ rằng bạn không thể thực hiện được điều này với UNPIVOT
và một 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
Xem SQL Fiddle with Demo . Điều này cũng có thể được thực hiện động nếu cần.
Chỉnh sửa, nếu thứ tự cột cần được giữ lại, thì bạn có thể sử dụng một cái gì đó như thế này, áp dụng row_number()
mà không cần sử dụng order by
trên một trong các cột trong bảng của bạn (đây là bài viết về cách sử dụng số hàng không xác định
):
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;