2-depth 해결 방안 문의드립니다. 1 1 7,432

by 짱구 [SQL Query] 2-depth oracle [2016.06.10 14:33:44]


 2-depth 해결 방안 문의드립니다.

 

SELECT (SELECT (SELECT RTRIM(XMLAGG(XMLELEMENT(e, DISTINCT T3.type || '|')).EXTRACT ('//text()'), '|')
          FROM package T1,
               package_detail T2
         WHERE T1.product_id = T2.product_id
           AND T2.contents_id = TT.contents_id) conts_type
  FROM history TT

 

XMLAGG(XMLELEMENT에 DISTINCT 가 되면 싶게 해결 될듯한데 안되네요 

그래서 생각한게 2-depth를 생각했습니다.

 

SELECT (SELECT RTRIM(XMLAGG(XMLELEMENT(e, T3.type || '|')).EXTRACT ('//text()'), '|')
          FROM (SELECT DISTINCT T1.type, T2.contents_id
	          FROM package T1,
		       package_detail T2
                 WHERE T1.product_id = T2.product_id) T3
         WHERE T3.contents_id = TT.contents_id) conts_type
    FROM history TT

이렇게 할려다 보니 DISTINCT 가 type만의 DISTINCT가 아니라서 결과값이 좀 다르게 나오네요.

type만의 DISTINCT 를 XMLAGG(XMLELEMENT 할 수 있는 방법이 있을까요?

 

*

10g 사용중이구요 multi row를 single row로 만들때 구분자를 유동적으로 변경 가능해야해서

XMLAGG(XMLELEMENT 를 썼습니다.

*

본 글에는 history TT 이렇게 간단하게 적었지만 저 자체도 약간의 조건으로 구해지는 테이블입니다.

 

답변 부탁드리겠습니다.

 

감사합니다.

 

 

by 짱구 [2016.06.10 14:58:18]

깊게 고민하다보니 쉬운방법을 못 생각했네요.

 

그냥 10g에서 wm_concat (distinct 가능) 지원되니 우선 wm_concat 쓰고 , 구분자를 

 

유동적으로 replace하는게 깔끔하네요. 관심 가져주셔서 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입