下面是其与发布样品数据和输出工作的解决方案。它分两步工作:连接每行的列,然后使用LISTAGG()来汇总所有行,以组合col1, col2
。
SQL> with cte as (
2 select col1
3 , col2
4 , 'col3:' || col3 ||' col4:' || col4 as col3col4
5 , row_number() over (partition by col1, col2 order by col1, col2) as rn
6 from input_table
7 )
8 select col1
9 , col2
10 , listagg(col3col4, ' ') within group (order by rn) as concat_output
11 from cte
12 group by col1, col2;
COL1 COL2 CONCAT_OUTPUT
---- ---- ----------------------------------------
A B col3:2 col4:TEXT col3:1 col4:HELLO
C X col3:5 col4:DEMO
SQL>
来源
2017-08-26 08:42:53
APC
你是什么意思的'过滤列是相同的列?您的示例中哪些列是“过滤列”,哪些列是“相同”,哪些列是“不同”,为什么?请解释。 – krokodilko
这里col1列和col2列将被匹配,因为col1 = A和col2 = B匹配3个列中的2个记录。 – Bisu
因此,您希望首先检查所有可能的列组合(2列或更多列):'(col1 ,(col1,col3),......(col2,col4)...(col1,col2,col3),(col1,col2,col4).....',如果存在为给定的列组合重复记录(超过1条记录),然后为这些重复的记录和组合创建一个包含数据的平面文件。我是对的还是myaybe我误解了一些东西? – krokodilko