by 김대영 [SQL Query] 오라클 함수 [2018.01.30 20:04:27]
|인문계|자연계|전문계|예체능계| 각 각각 컬럼으로 존재하고
4개의 컬럼을 CONCAT 해서 쉼표 구분자로 한개의 칼럼으로 불러오려고 합니다.
각 대상자의 데이터중 4개중 있는것과 없는것이 각각 달라서
A,C,D 와 같은 형태로 쉼표 반복없이 , 처음/마지막은 쉼표없음과 같이 불러오려고 하면 어떻게 하면 될까요 ?
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 ;