CONNECT BY LEVEL 질문입니다. 0 1 1,122

by 한결 [SQL Query] [2014.10.08 15:56:49]


A 라는 테이블에
ID, CD, S_NO, E_NO 값이 있습니다.
1, 'A', 1, 10
2, 'B', 11, 15
3, 'A', 16, 20
4, 'C', 21, 30
5, 'A', 31, 35

SELECT LEVEL FROM A
WHERE CD = 'A'
CONNECT BY LEVEL >= S_NO AND LEVEL <= E_NO

이렇게 두 수 사이의 값들을 불러와야 되는데,
중복된 데이터를 없애기 위해 GROUP BY LEVEL하니 계속 돌기만 하네요,,

다른 방법이 있을까요?

by 마농 [2014.10.08 17:24:22]

Connect By Level <= n 을 통한 행복제는
오직 한건의 자료만 가지고 해야 합니다.
여러건의 자료를 가진 집합에 바로 적용하시면 시스템 뻗어요.
http://www.gurubee.net/article/55635

WITH t AS
(
SELECT 1 id, 'A' cd, 1 s_no, 10 e_no FROM dual
UNION ALL SELECT 2, 'B', 11, 15 FROM dual
UNION ALL SELECT 3, 'A', 16, 20 FROM dual
UNION ALL SELECT 4, 'C', 21, 30 FROM dual
UNION ALL SELECT 5, 'A', 31, 35 FROM dual
)
SELECT id, cd, s_no, e_no
     , s_no + lv - 1 lv
  FROM t
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99)
 WHERE lv <= e_no - s_no + 1
   AND cd = 'A'
 ORDER BY lv
;

 

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