여러 컬럼을 하나로 합치는 방법 도와주시면 감사하겠습니다.
예시 데이터는 아래와 같습니다.
WITH T AS (
SELECT 'WW' AS PK
,'발굴1' AS A1
,'' AS A2
,'발굴3' AS A3
,'' AS A4
,'' AS A5
FROM DUAL
UNION ALL
SELECT 'QQ' AS PK
,'발굴1' AS A1
,'발굴2' AS A2
,'발굴3' AS A3
,'발굴4' AS A4
,'발굴5' AS A5
FROM DUAL)
SELECT * FROM T
결과는 아래와 같이 출력 되면 됩니다.
WW | 발굴1,발굴3 |
발굴1,발굴2,발굴3,발굴4,발굴5 |
이렇게 여러 컬럼을 하나의 컬럼으로 합치면서 , 형태로 표현하고 싶습니다.
WM_CONCAT 함수를 쓰면 세로로된 데이터를 가로 한줄로 만들수 있습니다. 쿼리를 직접 짜드리고 싶지만
혹시나 안될까바 참고하시면 될것같습니다.
예
WITH T AS
(
SELECT 1 NO, 5000 WON FROM DUAL UNION ALL
SELECT 1 NO, 3000 WON FROM DUAL UNION ALL
SELECT 2 NO, 6000 WON FROM DUAL UNION ALL
SELECT 3 NO, 4000 WON FROM DUAL UNION ALL
SELECT 3 NO, 7000 WON FROM DUAL UNION ALL
SELECT 3 NO, 2000 WON FROM DUAL UNION ALL
SELECT 4 NO, 5000 WON FROM DUAL UNION ALL
SELECT 4 NO, 7000 WON FROM DUAL
)
SELECT NO, WM_CONCAT(WON)
FROM T
GROUP BY NO
ORDER BY NO
결과
No Wm_concat(won)
------- -----------------
1 5000,3000
2 6000
3 4000,7000,2000
4 5000,7000
WITH t AS ( SELECT 'WW' pk, '발굴1' a1, '' a2, '발굴3' a3, '' a4, '' a5 FROM dual UNION ALL SELECT 'QQ', '발굴1', '발굴2', '발굴3', '발굴4', '발굴5' FROM dual ) -- 1. 문자 함수를 이용하여 이어 붙이기 SELECT pk , SUBSTR( NVL2(a1, ','||a1, '') || NVL2(a2, ','||a2, '') || NVL2(a3, ','||a3, '') || NVL2(a4, ','||a4, '') || NVL2(a5, ','||a5, '') , 2) a FROM t ; -- 2. UnPivot & ListAgg SELECT pk , LISTAGG(a, ',') WITHIN GROUP(ORDER BY gb) a FROM t UNPIVOT (a FOR gb IN (a1, a2, a3, a4, a5)) GROUP BY pk ;