考虑下面的表结构,
create table test_pivot (
id number,
value number
);
insert into test_pivot values(1, 100);
insert into test_pivot values(2, 200);
insert into test_pivot values(3, 300);
insert into test_pivot values(4, 400);
insert into test_pivot values(5, 500);
insert into test_pivot values(6, 600);
我可以编写一个PIVOT查询来将列转换为标题。
select *
from test_pivot pivot(sum(value) as val_ for(id) in(1, 2, 3, 4, 5));
这将给我一个如下所示的输出,
1_VAL_ 2_VAL_ 3_VAL_ 4_VAL_ 5_VAL_
100 200 300 400 500
现在,我不想对pivot子句中的值进行硬编码,但我想使用子查询。所以我尝试了这个,
select *
from test_pivot pivot XML (sum(value) as val_ for(id) in(select id from test_pivot where id = 2));
我运行时获得的结果是,
<PivotSet><item><column name = "ID">2</column><column name = "VAL_">200</column></item></PivotSet>
由于oracle中的PIVOT强制我们在查询中放置XML以使用子查询,因此结果是XML格式。有没有办法将此结果转换为表格格式?