2017-05-22 25 views
0

バリア:何も作成できません。 GTT、PROCなどはありません。Exadataのデータ・レイクを照会しています。私が作成したスクリプトは、ToadまたはSQL Developerから実行されます。複数の行のフィールドを1つのフィールドに連結する

私は3行を返すSELECTクエリがあります。それぞれの日のための

  • にIDKey
  • EVENT

を、にIDKeyは、ダースかそこらEVENTの可能性が高いがあります。例:

DATE  IDKEY EVENT  
10/17/2016 300328 EVENT1  
10/17/2016 300328 EVENT3  
10/17/2016 300328 EVENT4  
10/17/2016 300440 EVENT1  
10/17/2016 300440 EVENT2  
10/17/2016 300440 EVENT5 

特定のDATEでは、IDKeyには複数のEVENTSがあり、それぞれが新しい行を生成します。

目標:DATEとIDKEYをグループ化し、すべての一意のEVENTSを単一のフィールドに連結する単一の行を作成します。

DATE IDKEY EVENT  
10/17/2016 300328 'EVENT1 | EVENT3 | EVENT4'  
10/17/2016 300440 'EVENT1 | EVENT2 | EVENT5' 
+1

ご使用のOracleのバージョンを常に記述してください。この場合、あなたのバージョンにそれがあれば、listaggが最適です。 – mathguy

答えて

1

listagggroup by次のようになります。eventnosの膨大な数がある場合

with demo (dt, id, event) as 
    (select date '2016-10-17', 300328, 'EVENT1' from dual union all 
    select date '2016-10-17', 300328, 'EVENT3' from dual union all 
    select date '2016-10-17', 300328, 'EVENT4' from dual union all 
    select date '2016-10-17', 300440, 'EVENT1' from dual union all 
    select date '2016-10-17', 300440, 'EVENT2' from dual union all 
    select date '2016-10-17', 300440, 'EVENT5' from dual 
    ) 
select dt, id 
    , listagg(event, '|') within group (order by event) as events 
from demo 
group by dt, id; 

DT     ID EVENTS 
----------- ---------- -------------------------------- 
17/10/2016  300328 EVENT1|EVENT3|EVENT4 
17/10/2016  300440 EVENT1|EVENT2|EVENT5 

彼は問題がある可能性。

+0

listagg()の2つの提案のうち、あなたのものは正しい構文と正しい構文を提供することが証明されています。私は良いレッスンを学び、厄介なビジネス問題を解決しました。ありがとう! –

関連する問題