我的问题是关于将行转换为列。 我有数据类型为varchar2的表T1(c1,c2,c3,c4,c5)列,我想转置获得的行, 例如:
select * from T1
给予
c1 c2 c3 c4 c5
row1 1 2 3 4 5
row2 A B C D E
....
rown U V W X Y
预期结果是
C1 1 A......U
C2 2 B......V
C3 3 C......W
C4 4 D......X
C5 5 E......Y
不同列中的所有行(表仅包含10-15行) 我已经尝试了以下查询,但是没有给出预期的结果。
Select RN,value
From (
Select x.*,row_number ()
Over ( Order By c1) rn From T1 x)
Unpivot (value For value_type In (C1,c2,c3,c4,c5)
);
答案 0 :(得分:1)
因此,您只需要再次旋转数据即可:
select *
from (
select rn, val, col
from (select t1.*, row_number() over (order by c1) rn from t1)
unpivot (val for col in (c1, c2, c3, c4, c5)))
pivot (max(val) for rn in (1, 2, 3, 4))
order by col
您必须知道t1
中有多少行,并在数据透视in
子句(1, 2, 3, 4)
中列出它们,或者为每列添加别名。