A,C,D 와 같은 형태로 쉼표 반복없이 , 처음/마지막은 쉼표없음과 같이 불러오려고 하면 어떻게 하면 될까요 0 1 1,572

by 김대영 [SQL Query] 오라클 함수 [2018.01.30 20:04:27]


|인문계|자연계|전문계|예체능계|  각 각각 컬럼으로 존재하고

4개의 컬럼을 CONCAT 해서 쉼표 구분자로 한개의 칼럼으로 불러오려고 합니다.
각 대상자의 데이터중 4개중 있는것과 없는것이 각각 달라서

A,C,D 와 같은 형태로 쉼표 반복없이 , 처음/마지막은 쉼표없음과 같이 불러오려고 하면 어떻게 하면 될까요  ?
 

by 마농 [2018.01.31 08:24:03]
WITH t AS
(
SELECT 1 id, 'A' c1, 'B' c2, 'C' c3, 'D' c4 FROM dual
UNION ALL SELECT 2, 'X', '' , 'Y', '' FROM dual
UNION ALL SELECT 3, 'a', 'b', 'c', '' FROM dual
)
-- 1. 널이 아닌 것만 컴마 포함하여 붙인 뒤 맨 앞의 컴마 제거
SELECT id
     , SUBSTR( NVL2(c1, ','||c1, '') ||
               NVL2(c2, ','||c2, '') ||
               NVL2(c3, ','||c3, '') ||
               NVL2(c4, ','||c4, '') , 2) c
  FROM t
;
-- 2. UNPIVOT 후 그룹바이 LISTAGG
SELECT id
     , LISTAGG(c, ',') WITHIN GROUP(ORDER BY gb) c
  FROM t
 UNPIVOT (c FOR gb IN (c1, c2, c3, c4))
 GROUP BY id
;

 

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