쿼리 질문입니다. 0 3 2,438

by 디케이 [2013.04.16 15:57:03]



특정 컬럼에 구분자(쉼표:,)를 이용해 멀티값이 들어 있습니다.

보여주고자 하는것은 해당 코드값을 코드명으로 치환해서 보여주는겁니다.

근데, 여기서 들어있는값 순서대로 치환해서 보여주도록 하는건데 이부분이 안되네요

참고로 아래 샘플데이터입니다.
WITH
T_CODE(cd, nm, seq) AS
( SELECT 'BUS', '부산', 1 FROM dual
UNION ALL SELECT 'SEO', '서울', 2 FROM dual
UNION ALL SELECT 'DAJ', '대전', 3 FROM dual
UNION ALL SELECT 'DAG', '대구', 4 FROM dual
UNION ALL SELECT 'GWA', '광주', 5 FROM dual
)
,T_DATA(c1, c2) AS
( SELECT 'A', 'BUS' FROM dual
UNION ALL SELECT 'B', 'DAG,BUS,GWA' FROM dual
UNION ALL SELECT 'C', 'GWA,DAJ,DAG,BUS' FROM dual
)

SELECT D.*
 , (SELECT LISTAGG(C.NM, ',') WITHIN GROUP (ORDER BY NULL) FROM T_CODE C WHERE INSTR(D.C2, C.CD) > 0 ) AS NM_DESC
 FROM T_DATA D

위 쿼리 결과 NM_DESC 는 코드명으로 ORDER BY가 되어 버리네요..


얻고자 하는 결과는 T_DATA에 들어있는 C2 컬럼의 코드순 그대로 코드값만 코드명으로 치환하는 겁니다.

아, 코드값의 리스트는 너무 많아서 일일이 REPLACE 할 수 없다는 가정으로 부탁드립니다.
예) REPLACE(C2, 'BUS', '부산') --> X


==> 원하는 결과
예) GWA,DAJ,DAG,BUS => 광주,대전,대구,부산

끝까지 읽어주셔서 감사합니다.
by 디케이 [2013.04.16 16:02:51]

이미지를 어떻게 올리는지 모르겠네요..
일단 내용은 쿼리를 돌리면 보실수 있어요..

by 백면서생 [2013.04.16 16:32:17]

ORDER BY NULL --> ORDER BY INSTR(D.C2, C.CD)

by 디케이 [2013.04.16 16:35:40]

오 감사감사

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