如何取消透视 Oracle 11 中的单行?

How to unpivot a single row in Oracle 11?

我有一行数据,我想将这一行变成一列,这样我就可以使用游标 运行 逐一浏览数据。我试过使用

SELECT * FROM TABLE(PIVOT(TEMPROW)) 

但我得到

'PIVOT' Invalid Identifier error.

我也尝试过相同的语法,但

('select * from TEMPROW')

我看到的所有使用 pivot 的东西总是使用 count 或 sum,但我只想将所有 varchar2 的这一行变成一列。

我的行看起来像这样:

美国广播公司 | 123 |啊啊 | bb | 111 | 222 |

我需要它变成这样:

ABC

123

aaa

bbb

111

222

我的代码类似这样:

BEGIN
    OPEN C_1 FOR SELECT * FROM TABLE(PIVOT( 'SELECT * FROM TEMPROW'));
        LOOP
            FETCH C_1 INTO TEMPDATA;
            EXIT WHEN C_2%NOTFOUND;
            DBMS_OUTPUT.PUT_LINE(1);
         END LOOP;
    CLOSE C_1;
END;

您必须取消透视才能将整行转换为 1 个单列

     select * from Table
     UNPIVOT
     (col for col in (
       'ABC' , '123' , 'aaa' ,' bbb' , '111' , '222' 
       ))

或使用 union,但为此您需要手动添加列名,例如

Select * from ( Select col1 from table 
 union
 select col2 from table union...
 Select coln from table) 

示例输出如下所示

unpivoting 的一个选项是按 decode()cross join 对包含列编号的查询进行编号:

select decode(myId, 1, col1,
                    2, col2,
                    3, col3,
                    4, col4,
                    5, col5,
                    6, col6 ) as result_col
  from temprow
  cross join (select level AS myId FROM dual CONNECT BY level <= 6 );

或使用带有 unpivot 关键字的查询,考虑列的通用表达式(在本例中为 col)必须具有与相应表达式相同的数据类型:

select result_col from
(
select col1, to_char(col2) as col2, col3, col4, 
       to_char(col5) as col5, to_char(col6) as col6  
  from temprow
 ) 
 unpivot (result_col for col in (col1,col2,col3,col4,col5,col6));

Demo