可以对列名称进行分组以使用
listagg功能。将行转换为列使用
Pivot功能。
with tab as( select 1 as id, 'Name' as col, 'Bob' as OldValue , 'Roy' as NewValue from dual union all select 1 as id, 'Age', '26', '28' as NewValue from dual union all select 1 as id, 'Section', 'B', 'C' as NewValue from dual )select *from (select id ,t.col as col ,max('was: '|| t.OldValue || ' now: ' || t.NewValue) as val ,listagg(t.col,',') within group(order by t.id) OVER (PARTITION BY null) as ChangedColumn from tab tgroup by id,t.col) pivot ( max(val) for col in('Name','Age','Section'));