2016-05-16 5 views
0

私はユニークなソースを文字列に変換するために正規表現を使用しています。私の問題は、ソースがマージされている:[マネージャー、リーム、連、連]をSQLの正規表現が正しくグループ化されていません

すなわちソース

必要な出力[マネージャー、リーム]

出力受ける[manageream、リーム]

SELECT regexp_replace(listagg(c.source, ',') 
within group(order by c.person_no) , 
'([^,]+)(,\1)+', '\1') source 
FROM table c 

上記のコードを修正してに必要な出力を取得するにはどうすればよいですか?

+0

本当の問題は 'listagg'です。あなたはそれなしでこれをより簡単に行うことができます。 – Dan

答えて

1

私はあなたの必要性を理解していれば、あなたは、単にDISTINCTが必要になる場合があります

SQL> create table test(source) as (
    2 select 'manager' from dual union all 
    3 select 'ream' from dual union all 
    4 select 'ream' from dual union all 
    5 select 'ream' from dual 
    6 ); 

Table created. 

SQL> select listagg(source, ',') within group (order by 1) 
    2 from (
    3   select distinct source 
    4   from test 
    5  ); 

LISTAGG(SOURCE,',')WITHINGROUP(ORDERBY1) 
---------------------------------------------------------------------------- 
manager,ream 

SQL> 

内側のクエリのみに使用され、外側が連結する間に、個別の値を取得します。あなたはこれを別のやり方で書き換えることができます。私はこれが最も読みやすいものだと信じています。

+0

あなたが提供したソリューションをありがとうございます。しかし、私はまだ結果が重複している(マネージャー、リーム、連)を得ています。 – Ariel

+0

'テーブルから別のソースを選択してください。たとえば空白の文字のために、類似しているが等しくない値があるかもしれませんか? – Aleksej

関連する問題