如何在Oracle中将2列1行移动到1列2行

我有一个查询,似乎无法解决。我想更改结果集,使其为1列,并且可以为N行。

原始查询

select src_approval,dst_approval
from example_table
where id = 62615
group by src_approval,dst_approval

我尝试了以下不正确的方法。

select src_approval,dst_approval
from example_table
unpivot
( colvalue for col in (src_approval,dst_approval) )
where id = 62615
group by src_approval,dst_approval

我尝试了以下操作,但仍然可以给我2列

select *
from   ( 
select src_approval,dst_approval
from example_table
where id= 62615
group by src_approval,dst_approval
)
 unpivot
       ( income_component_value
         for income_component_type in (src_approval,dst_approval)
       )

结果

select *
from   ( 
select src_approval,dst_approval
from exemption_policies
where exemption_id = 62615
group by src_approval,dst_approval
)
 unpivot
       ( owner
         for approval in (src_approval,dst_approval)
       )
vipxiangyu 回答:如何在Oracle中将2列1行移动到1列2行

如果您考虑使用unpivot,则可以使用横向联接:

select distinct x.dte
from example_table et cross join lateral
     (select et.src_approval as dte from dual union all
      select et.dst_approval as dte from dual
     ) x
where id = 62615;

更常见的是,这只能使用union来编写:

select et.src_approval
from example_table et
union     -- on purpose to remove duplicates
select et.dst_approval
from example_table et;
,

是的,您仍然可以将unpivot用作

select colvalue from 
(
select id,colvalue,col
  from example_table   
  unpivot(colvalue for col in(src_approval,dst_approval))
)  
where id = 62615

Demo

本文链接:https://www.f2er.com/3152401.html

大家都在问