implode로 합친 값을 각 칼럼별로 select 0 1 546

by 성공한다 [Oracle 기초] [2020.09.22 10:04:00]


안녕하세요.

값을 ,로 구분하여 insert하였습니다.(체크박스 입력값)

처리자 값1 값2
홍길동 1,2,3 7,8

이렇게 출력이 되게 했는데

처리자 값1 값1 값1 값2 값2
홍길동 1 2 3 7 8

이런식으로 칼럼별로 출력할수 있을까요..?

감사합니다.

by 마농 [2020.09.22 10:55:30]

SQL 만으로 가변 컬럼을 구현할 수는 없습니다.
출력 컬럼의 개수를 고정으로 정해서 구현하거나
동적쿼리를 이용해 구현해야 합니다.
 

WITH t AS
(
SELECT '홍길동' nm, '1,2,3' v1, '7,8' v2 FROM dual
UNION ALL SELECT '고길동', '2,3', '5,6,7,8' FROM dual
)
-- 1안) 항목별 4개씩 고정
SELECT nm
     , REGEXP_SUBSTR(v1, '[^,]+', 1, 1) v1_1
     , REGEXP_SUBSTR(v1, '[^,]+', 1, 2) v1_2
     , REGEXP_SUBSTR(v1, '[^,]+', 1, 3) v1_3
     , REGEXP_SUBSTR(v1, '[^,]+', 1, 4) v1_4
     , REGEXP_SUBSTR(v2, '[^,]+', 1, 1) v2_1
     , REGEXP_SUBSTR(v2, '[^,]+', 1, 2) v2_2
     , REGEXP_SUBSTR(v2, '[^,]+', 1, 3) v2_3
     , REGEXP_SUBSTR(v2, '[^,]+', 1, 4) v2_4
  FROM t
;
WITH t AS
(
SELECT '홍길동' nm, '1,2,3' v1, '7,8' v2 FROM dual
UNION ALL SELECT '고길동', '2,3', '5,6,7,8' FROM dual
)
-- 2안) 두개 항목 합쳐서 8개 고정
SELECT nm
     , REGEXP_SUBSTR(v, '[^,]+', 1, 1) v_1
     , REGEXP_SUBSTR(v, '[^,]+', 1, 2) v_2
     , REGEXP_SUBSTR(v, '[^,]+', 1, 3) v_3
     , REGEXP_SUBSTR(v, '[^,]+', 1, 4) v_4
     , REGEXP_SUBSTR(v, '[^,]+', 1, 5) v_5
     , REGEXP_SUBSTR(v, '[^,]+', 1, 6) v_6
     , REGEXP_SUBSTR(v, '[^,]+', 1, 7) v_7
     , REGEXP_SUBSTR(v, '[^,]+', 1, 8) v_8
  FROM (SELECT nm
             , v1 || ',' || v2 v
          FROM t
        )
;

 

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