2017-08-26 7 views
0

テーブルレコードをフラットファイルに書き込む必要があります。 ここには次の要件があります。 フィルタリング列が同じ列をすべて見つけなければなりません。そのような場合は、フラットファイルの同じ行に列名プレフィックスという値が書き込まれます。ここでcol1とcol2は一意のレコードを形成します。1行にデータのパターンを作成する方法

入力テーブル:

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つ以上の列) 、col2)、(col1、col3)、......(col2、col4)...(col1、col2、col3)、(col1、col2、col4)..... '特定の列の組み合わせに対して重複レコード(1レコード以上)を作成し、次にこれらの重複したレコードとコンビナントに対して、データを含むフラットファイルを生成します。私は何かを誤解していますか? – krokodilko

答えて

0

は、ここに掲載のサンプルデータと出力で動作するソリューションです。 2つのステップで動作します。各行の列を連結し、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> 
関連する問題