2017-08-26 59 views
0

我有写表格记录到平面文件的要求。 以下是要求: 我必须找到过滤列相同的所有列,在这种情况下,行将被写入平面文件的同一行上,列名为前缀为值。这里col1和col2将形成一个独特的记录。如何形成一行数据模式

输入表:

col1 col2 col3 col4 
A B  1 HELLO 
C X  5 DEMO 
A B  2 TEXT 

输出:

A B col31,col4HELLO col32,col4TEXT 
C X col35,col4DEMO 
+0

你是什么意思的'过滤列是相同的列?您的示例中哪些列是“过滤列”,哪些列是“相同”,哪些列是“不同”,为什么?请解释。 – krokodilko

+0

这里col1列和col2列将被匹配,因为col1 = A和col2 = B匹配3个列中的2个记录。 – Bisu

+0

因此,您希望首先检查所有可能的列组合(2列或更多列):'(col1 ,(col1,col3),......(col2,col4)...(col1,col2,col3),(col1,col2,col4).....',如果存在为给定的列组合重复记录(超过1条记录),然后为这些重复的记录和组合创建一个包含数据的平面文件。我是对的还是myaybe我误解了一些东西? – krokodilko

回答

0

下面是其与发布样品数据和输出工作的解决方案。它分两步工作:连接每行的列,然后使用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> 
相关问题