데이터 저장 시 한필드에 구분자로 저장했을때 구분자를 이용해 행열 변환하는 방법입니다.
1. 모든 데이터가 같은 구분자 수로 저장되는 경우는 regexp_substr과 UNPIVOT을 이용해서 처리할 수 있습니다.
SELECT * FROM (
SELECT temp_date
, REGEXP_SUBSTR(temp_num, '[^,]+', 1, 1) AS num1
, REGEXP_SUBSTR(temp_num, '[^,]+', 1, 2) AS num2
, REGEXP_SUBSTR(temp_num, '[^,]+', 1, 3) AS num3
, REGEXP_SUBSTR(temp_num, '[^,]+', 1, 4) AS num4
FROM (
SELECT '날짜1' AS temp_date
, '111,222,333,444' AS temp_num
FROM DUAL
UNION ALL
SELECT '날짜2' AS temp_date
, '123,234,345,456' AS temp_num
FROM DUAL
)
) UNPIVOT(un_pi_num FOR num IN(num1,num2,num3,num4));
2. 데이터 내 구분자 수가 정해져있지 않을 경우는 LEVEL을 이용해서 처리할 수 있습니다.
SELECT DISTINCT temp_date
, REGEXP_SUBSTR(temp_num, '[^,]+', 1, LEVEL) AS temp_num
FROM (
SELECT '날짜1' AS temp_date
, '111,222,333,444,555' AS temp_num
FROM DUAL
UNION ALL
SELECT '날짜2' AS temp_date
, '123,234,345,456' AS temp_num
FROM DUAL
) A
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(temp_num, '[^,]+',''))+1
ORDER BY temp_date, temp_num
'코딩' 카테고리의 다른 글
SORT 정렬 컬럼 값 ROWNUM 업데이트 방법 (0) | 2025.02.07 |
---|---|
onclick이 동작하지 않을때(InnerHTML, 다이나믹html, 동적 생성) (0) | 2025.02.06 |