[Oracle] 컬럼의 값 만큼 행 늘리기 (SELECT 행 추가)

오라클 쿼리를 작성하다 보면 칼럼의 수치값만큼 행의 개수를 늘려서 조회를 해야 하는 경우가 있다. CONNECT BY를 사용하여 순차적인 값이 있는 가상 테이블을 만들어서 조인하는 방법과 물리적인 테이블을 만들어서 조인하는 방법이 있다. 아래는 가상 테이블을 활용하여 칼럼의 수치값만큼 SELECT 행을 추가하는 방법이다.

 

 

CNT 칼럼의 수치값만큼 해당 NM의 행을 늘리는 방법이다.

 

WITH test_table AS (
   SELECT 'AAA' nm, 3 cnt FROM dual UNION ALL
   SELECT 'BBB' nm, 5 cnt FROM dual UNION ALL
   SELECT 'CCC' nm, 2 cnt FROM dual
)

SELECT a.nm
     , a.cnt
     , b.num
  FROM test_table a
     , (SELECT LEVEL num FROM dual CONNECT BY LEVEL <= 10) b
 WHERE b.num BETWEEN 1 AND a.cnt 
 ORDER BY a.nm, b.num

 

 

위의 예제는 CONNECT BY를 이용하여 최대 10건의 행까지 늘릴 수 있으며, 늘릴 행이 아주 크다면 가상 테이블과 조인하면 쿼리문의 속도가 느려지기 때문에 추천하지는 않는다.

 

a.cnt의 값만큼 가상 테이블과 조인하여 해당 칼럼의 수치값만큼 행을 추가할 수 있다.

 

 

댓글

Designed by JB FACTORY