고수님들의 조언을 부탁드립니다. 0 2 2,011

by 왕보초 [Oracle 기초] oracle 공통코드 텍스트로 [2020.02.29 04:40:06]


안녕하세요.  고수님들에 조언이 요청합니다.

한 A테이블에 A_1 필드에 데이터가  01,03,07,05,10 이렇게 들어가 있는데....

공통테이(CMCODE)테이블 

코드 코드명
01 서점
02 백화점
03 전통시장
05 소형마트
06 편의점
07 대형마트
09 도ㆍ매점
10 인터넷
17 기타

경우 코드로 되어이있는 function을 통해서 데이터

   01,03,07,05,10 -->  서점,전통시장,대형마트,소형마트,인터넷

식으로 표시 하고 있는데.. 고수님들의 조언을 부탁드립니다.

 

by 마농 [2020.03.02 08:32:01]

우선, 테이블 정규화가 필요해 보입니다.
함수 사용에 문제가 없다면? 그대로 사용해도 됩니다.
다만, 함수 사용으로 인해 쿼리가 느리다면?
함수 내부에 비효율은 없는지 검토하고,
함수 대신 다른 방법도 찾아봐야 합니다. (조인 후 그룹바이+LISTAGG)

WITH cmcode AS
(
SELECT '01' cd, '서점' nm FROM dual
UNION ALL SELECT '02', '백화점'   FROM dual
UNION ALL SELECT '03', '전통시장' FROM dual
UNION ALL SELECT '05', '소형마트' FROM dual
UNION ALL SELECT '06', '편의점'   FROM dual
UNION ALL SELECT '07', '대형마트' FROM dual
UNION ALL SELECT '09', '도ㆍ매점' FROM dual
UNION ALL SELECT '10', '인터넷'   FROM dual
UNION ALL SELECT '17', '기타'     FROM dual
)
, data_t AS
(
SELECT 1 pk, '01,03,07,05,10' cd_list FROM dual
UNION ALL SELECT 2, '01,03,09' FROM dual
)
SELECT a.pk
     , a.cd_list
     , LISTAGG(c.nm, ',') WITHIN GROUP(ORDER BY INSTR(a.cd_list, c.cd)) nm_list
  FROM data_t a
     , cmcode c
 WHERE INSTR(a.cd_list, c.cd) > 0
 GROUP BY a.pk, a.cd_list
;

 


by 왕보초 [2020.03.02 09:33:27]

언제나 답변을 달아주시고 여러 가지로 조언을 해주신 점 진심으로 감사드립니다.

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