앞서 질문에 또 다른 의문점이 생겨 질문합니다.
아래 쿼리에서 가운데 빨간색으로 된 쿼리를 실행하면
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
2 Y 00000006AR 20010701
3 J 00000006AR 20020901
4 P 00000006AR 20110501
여기서 TT의 값을 연속으로 출력하기 위해 위와 같이 쿼리를 만들었는데요,
정렬에 상관없이 순서대로 나옵니다.
TEST PART_NO
1 JPRY 00000006AR
원하는 결과 값은
TEST PART_NO
1 RYJP 00000006AR
이런식으로 보여지길 원하는데 방법이 없을까요?
안에서 정렬을 해도 결과적으로 SELECT 한 순서대로 나와버리네요..
-- 습관적으로 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 ;