oracle将行转换为列

时间:2019-02-05 11:17:51

标签: sql oracle oracle11g

我的问题是关于将行转换为列。 我有数据类型为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)
         ); 

1 个答案:

答案 0 :(得分:1)

因此,您只需要再次旋转数据即可:

dbfiddle demo

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)中列出它们,或者为每列添加别名。