ROW 값을 가로로 나타낼 때 정렬 문제입니다. 0 4 1,310

by 오라크으을럽 [SQL Query] [2014.03.05 15:54:14]


앞서 질문에 또 다른 의문점이 생겨 질문합니다.

아래 쿼리에서 가운데 빨간색으로 된 쿼리를 실행하면


    SELECT
   MAX(DECODE(TT,'A',TT))||
   MAX(DECODE(TT,'C',TT))||
   MAX(DECODE(TT,'D',TT))||
   MAX(DECODE(TT,'F',TT))||
   MAX(DECODE(TT,'J',TT))||
   MAX(DECODE(TT,'K',TT))||
   MAX(DECODE(TT,'L',TT))||
   MAX(DECODE(TT,'P',TT))||
   MAX(DECODE(TT,'Q',TT))||
   MAX(DECODE(TT,'R',TT))||
   MAX(DECODE(TT,'S',TT))||
   MAX(DECODE(TT,'T',TT))||
   MAX(DECODE(TT,'W',TT))||
   MAX(DECODE(TT,'Y',TT))TEST ,PART_NO
  

   FROM
   (
SELECT DISTINCT LPAD(MOTOR_KIND_CD,1)TT,
   PART_NO, MAX(DOM_BEGIN_APPLY_DATE)DOM_BEGIN_APPLY_DATE
   FROM TB_PART_CATALOG
   WHERE PART_NO = '00000006AR'
   GROUP BY LPAD(MOTOR_KIND_CD,1), PART_NO
   ORDER BY DOM_BEGIN_APPLY_DATE NULLS FIRST
    ) GROUP BY PART_NO



결과 값 
  TT    PART_NO   DOM_BEGIN_APPLY_DATE
1 R  00000006AR    19971111
Y  00000006AR    20010701
00000006AR    20020901
P  00000006AR    20110501

여기서 TT의 값을 연속으로 출력하기 위해 위와 같이 쿼리를 만들었는데요,
정렬에 상관없이 순서대로 나옵니다.

   TEST    PART_NO
1 JPRY 00000006AR  


원하는 결과 값은 

   TEST    PART_NO
RYJP 00000006AR

이런식으로 보여지길 원하는데 방법이 없을까요?

안에서 정렬을 해도 결과적으로 SELECT 한 순서대로 나와버리네요..

by 마농 [2014.03.05 16:16:14]
-- 습관적으로 Distinct 를 사용하시는 군요. 안 좋은 습관입니다.
-- LPAD 를 Substr 처럼 사용하셨네요. 결과가 같더라도 제기능을 쓰는게 좋겠지요.
-- 중간집합을 정렬하는 것은 별 의미도 없고 성능만 저하됩니다.
SELECT part_no
     , LISTAGG(tt) WITHIN GROUP(ORDER BY dom_begin_apply_date NULLS FIRST) test
  FROM (SELECT SUBSTR(motor_kind_cd, 1, 1) tt
             , part_no
             , MAX(dom_begin_apply_date) dom_begin_apply_date
          FROM tb_part_catalog
         WHERE part_no = '00000006AR'
         GROUP BY SUBSTR(motor_kind_cd, 1, 1), part_no
        )
 GROUP BY part_no
;

by 오라크으을럽 [2014.03.05 16:50:13]
지적 감사합니다.

공부를 독학으로 하다보니 안좋은 습관이 붙은 것 같네요.

좀 더 깔끔하게 수정해 주셔서 감사합니다.

 다만 제가 쓰고 있는 환경이 9i 버전이라서 적용이 안되네요..

LISTAGG 외에 다른 방법이 있을까요?

by 마농 [2014.03.05 17:55:59]

by 오라크으을럽 [2014.03.06 09:09:54]
마농님 덕분에 많은 공부 되었습니다 ^ ^

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