0

テストテーブルに次のような3つの列があります

ID | m_id    | S_m_id                                 
---------- --------------
1  |  1      |    1                  
1  |  2      |    3                  
1  |  3      |    4                  
1  |  5      |    6                  
2  |  1      |    1                  
2  |  2      |    3                  
2  |  3      |    4                  
3  |  5      |    6

列 1 に基づいて列 2 と列 3 を 1 つの行にマージしたいと考えています。そして、結果は次のようになります

ID | merge_id                                 
---------- --------------
1  |  1,1;2,3;3,4;5,6                  
2  |  1,1;2,3;3,4                  
3  |  5,6       
4

1 に答える 1

4

必要な機能はlistagg()、集計時に文字列連結を行うことです。また、最初に ID を連結する必要があります。

select id,
       listagg(m_id || ',' || s_m_id, ';') within group (order by m_id) as merge_ids
from test t
group by id;

ちなみに、結果のデータは正しくありません (3 行すべてで ID が同じであるため)。これはおそらく反対票の原因です。

編集(コメントへの応答):

元の例には 2 つのセパレーターがあり、1 つはカンマ (ID 間) で、もう 1 つはセミコロン (行間) です。いずれかを に置き換えて'|'、パイプ セパレーターを取得できます。

于 2013-06-17T13:08:20.157 に答える