我正在使用以下代码来显示“DEL”文本和“PAL”文本。 'DEL'和'PAL'文本可以跨越多行(并且每行的行数不一定相同)。
select trim(listagg(tx1.text, ', ') within group (order by tx1.text)) del_text,
trim(listagg(tx2.text, ', ') within group (order by tx2.text)) pal_text
from oes_ordtxt tx1
inner join oes_ordtxt tx2
on tx1.key1 = tx2.key1
and tx1.key2 = tx2.key2
and tx1.key3 = tx2.key3
and tx2.doctyp = 'PAL'
where tx1.key1 = '0018104834'
and tx1.key2 = '00001'
and tx1.key3 = '001'
and tx1.doctyp = 'DEL'
我遇到的问题是,我在'DEL文本上有多行,而在'PAL'文本上只有一行,'PAL'文本重复,例如。
'PAL_TEXT'是重复的,因为只存在一个PAL_TEXT,但存在三个DEL_TEXT。
有没有办法删除重复项?
谢谢,SMORF
答案 0 :(得分:1)
聚合中有多少个表并不重要(遗憾的是,如果没有您的数据结构,我无法检查语法):
select (select listagg(column_value,', ') within group (order by column_value) from table (del_text)) del_text
,(select listagg(column_value,', ') within group (order by column_value) from table (pal_text)) pal_text
from (select collect (distinct tx1.text) del_text,
collect (distinct tx2.text) pal_text
from oes_ordtxt tx1
inner join oes_ordtxt tx2
on tx1.key1 = tx2.key1
and tx1.key2 = tx2.key2
and tx1.key3 = tx2.key3
and tx2.doctyp = 'PAL'
where tx1.key1 = '0018104834'
and tx1.key2 = '00001'
and tx1.key3 = '001'
and tx1.doctyp = 'DEL'
group by 1)
答案 1 :(得分:0)
将选择重写为
1)对连接键上的两个表进行分组并计算listagg(可能删除重复键)
2)加入结果
连接将始终为1:1,因此不会导致重复。