특정 컬럼에 구분자(쉼표:,)를 이용해 멀티값이 들어 있습니다.
보여주고자 하는것은 해당 코드값을 코드명으로 치환해서 보여주는겁니다.
근데, 여기서 들어있는값 순서대로 치환해서 보여주도록 하는건데 이부분이 안되네요
참고로 아래 샘플데이터입니다.
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 => 광주,대전,대구,부산
끝까지 읽어주셔서 감사합니다.