오라클 계층쿼리로 해결 가능할까요? 0 5 1,613

by 에모토 [2014.03.31 13:10:37]




안읽은 메일
 답장  전달  삭제  
메뉴 더보기
보낸사람
"김상현" <togallyang@naver.com>
상세열기
(제목없음)
보낸시간 2014-03-31 (월) 12:58:01
원문보기안읽음 

기초 데이터 입니다.


SEQ_KEY  ITEM_NO   DETAIL_NO DETAIL_NM
--------------------------------------------
1111 1 1 전체
1111 2 1 전체
1111 3 3 TM
1111 3 4 DM
1111 3 5 EM
1111 3 6 SMS
1111 4 1 비고
2222 1 1 전체
2222 2 1 전체
2222 3 1 제외
2222 3 3 TM
2222 3 5 EM
2222 4 1 비고

ITEM_NO 3만 복수개가 존재합니다.

아래와 같이 복수개의 행을 하나의 행으로 표현하고 싶습니다.
여기서는 DETAIL_NO 열이 필요 없고 DETAIL_NM은 '|'로 구분하길 원합니다.

SEQ_KEY  ITEM_NO   DETAIL_NM
------------------------------------
1111 1 전체
1111 2 전체
1111 3 TM | DM | EM | SMS
1111 4 비고
2222 1 전체
2222 2 전체
2222 3 제외 | TM | EM
1111 4 비고


도움 요청드립니다(__)


※ 위 기초 데이터 쿼리입니다.
WITH TEMP(SEQ_KEY, ITEM_NO, DETAIL_NO, DETAIL_NM) AS
    (SELECT '1111', 1, 1, '전체' FROM DUAL
     UNION ALL
     SELECT '1111', 2, 1, '전체' FROM DUAL
     UNION ALL
     SELECT '1111', 3, 3, 'TM' FROM DUAL
     UNION ALL
     SELECT '1111', 3, 4, 'DM' FROM DUAL
     UNION ALL
     SELECT '1111', 3, 5, 'EM' FROM DUAL
     UNION ALL
     SELECT '1111', 3, 6, 'SMS' FROM DUAL
     UNION ALL
     SELECT '1111', 4, 1, '비고' FROM DUAL
     UNION ALL
     SELECT '2222', 1, 1, '전체' FROM DUAL
     UNION ALL
     SELECT '2222', 2, 1, '전체' FROM DUAL
     UNION ALL
     SELECT '2222', 3, 1, '제외' FROM DUAL
     UNION ALL
     SELECT '2222', 3, 3, 'TM' FROM DUAL
     UNION ALL
     SELECT '2222', 3, 5, 'EM' FROM DUAL
     UNION ALL
     SELECT '2222', 4, 1, '비고' FROM DUAL
    )
SELECT   *
FROM     TEMP
by 에모토 [2014.03.31 13:14:10]
폰으로 등록하다보니 Oracle Query 메뉴를 선택 못했네요ㅠ

by 홍상표 [2014.03.31 13:44:34]
SELECT  seq_key, item_no--, detail_no
    , substr (XMLAGG(XMLELEMENT(A,'|'|| DETAIL_NM ) ORDER BY DETAIL_NM).extract('//text()'),2) as VAL
FROM   TEMP
group by seq_key, item_no--, detail_no

by 마농 [2014.03.31 14:00:04]

by 에모토 [2014.03.31 14:38:57]
답변주신 홍상표님,마농님 모두모두 감사드립니다.(__)

by 김용학 [2014.04.01 12:09:58]
위에 답변은 완료 되었지만 전.. 공부삼아서 한번 만들어 봤어요.
언젠가 앞쪽에 답변을 달 그날을 위해서~~
WITH TEMP(SEQ_KEY, ITEM_NO, DETAIL_NO, DETAIL_NM) AS
(    SELECT '1111', 1, 1, '전체' FROM DUAL
  UNION ALL SELECT '1111', 2, 1, '전체' FROM DUAL
  UNION ALL SELECT '1111', 3, 3, 'TM' FROM DUAL
  UNION ALL SELECT '1111', 3, 4, 'DM' FROM DUAL
  UNION ALL SELECT '1111', 3, 5, 'EM' FROM DUAL
  UNION ALL SELECT '1111', 3, 6, 'SMS' FROM DUAL
  UNION ALL SELECT '1111', 4, 1, '비고' FROM DUAL
  UNION ALL SELECT '2222', 1, 1, '전체' FROM DUAL
  UNION ALL SELECT '2222', 2, 1, '전체' FROM DUAL
  UNION ALL SELECT '2222', 3, 1, '제외' FROM DUAL
  UNION ALL SELECT '2222', 3, 3, 'TM' FROM DUAL
  UNION ALL SELECT '2222', 3, 5, 'EM' FROM DUAL
  UNION ALL SELECT '2222', 4, 1, '비고' FROM DUAL
 )
SELECT SEQ_KEY, ITEM_NO
  , ListAgg(DETAIL_NM, '|') WITHIN GROUP(ORDER BY DETAIL_NO) name_11g
 FROM TEMP 
 GROUP BY SEQ_KEY, ITEM_NO ;
 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입