2017-05-22 5 views
0

장벽 : 아무 것도 만들 수 없습니다. GTT, PROC 등 없음 Exadata 데이터 호수를 쿼리하고 내가 만든 모든 스크립트가 Toad 또는 SQL Developer에서 실행됩니다. 여러 행의 필드를 단일 필드로 연결

내가 3 개 행을 반환하는 SELECT 질의가 :

  • 날짜
  • IDKey 각 날짜
  • EVENT

을 IDKey는 가능성이 다스 정도의 이벤트의가 있습니다. 예 :

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를 그룹화하고 모든 고유 EVENT를 단일 필드로 연결하는 단일 행을 생성합니다.

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

오라클 버전을 항상 기재하십시오. 이 경우 listagg가 가장 적합한 옵션입니다 (버전에 해당하는 경우). – mathguy

답변

1

이처럼 보이는 group bylistagg와 :

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 

이 eventnos의 거대한 숫자가있는 경우 그 문제가 있었다.

+0

listagg()에 대한 두 가지 제안 중 사용자의 작업 구문과 올바른 형식이 제공 되었음이 입증되었습니다. 나는 좋은 교훈을 얻었고 짜증나는 비즈니스 문제를 해결했다. 감사! –