如何取消透视 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));
我有一行数据,我想将这一行变成一列,这样我就可以使用游标 运行 逐一浏览数据。我试过使用
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));