여러 컬럼을 하나의 컬럼으로 합치는 방법좀 도와주세요 0 2 1,205

by 초봉 [Oracle 기초] [2019.05.01 13:28:08]


여러 컬럼을 하나로 합치는 방법 도와주시면 감사하겠습니다.

예시 데이터는 아래와 같습니다.

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
QQ 발굴1,발굴2,발굴3,발굴4,발굴5

 

이렇게 여러 컬럼을 하나의 컬럼으로 합치면서 ,  형태로 표현하고 싶습니다.

 

by DB 꿈나무 [2019.05.01 15:13:27]

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

 


by 마농 [2019.05.07 00:29:01]
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
;

 

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