如何解决如何在Oracle中为单行中的重复ID返回冗余行
可以对列名称进行分组以使用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 t
group by id,t.col
)
pivot ( max(val) for col in('Name','Age','Section'));
解决方法
我有一个Audit类的表,我们根据其他表中的某些触发器存储一些信息。
ID,Changed_Column,OldValue,NewValue将可用。现在有可能使用相同的ID,因为更改后的列将具有不同的值,所以我希望将其重复3-4次,我想将它们合并到单行中并获取数据。例如,
ID ChangedColumn OldValue NewValue
1 Name Bob Roy
1 Age 26 28
1 Section B C
现在,当我们选择它时,它将把所有行显示为separte,但是我想自行加入并通过基于ID值的合并来仅检索一条记录
预期的结果是这样的,
ID Name Age Section ChangedColumns
1 was :Bob now : Roy was:26 now:28 Was:B now:C Name,Age,Section
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。