2017-08-26 50 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> 
相關問題