채번을 할려고 하는데 빠진번호를 찾거나 max값으로 찾아오게 할 수 있을까요 0 4 2,698

by 김학빈 [SQL Query] 순번 채번 [2013.10.28 15:00:27]


예를들면요

순번이  1,2,3,4,6,7,8............................243,244,246, 247

이처럼 들어가 있습니다

자동으로 채번할때 맨처음엔 5번을 가져오고 5번을 채웠다면 그 다음 채번할때는 245번을 가져오고
그 다음 채번하면 248번을 채번해야 하는 식입니다

어떻게 해야 할 수 있는지 가르쳐 주세요~!! ㅠㅠ
by 홍상표 [2013.10.28 15:35:18]
with T (seq) as (
select 1 from dual union all
select 2 from dual union all
select 3 from dual union all
select 4 from dual union all
select 6 from dual union all
select 7 from dual union all
select 8 from dual union all
select 9 from dual 
)
select min(TAB_SEQ.seq)
from (
  select level seq
  from dual
  connect by level <= 10
  ) TAB_SEQ, T
where TAB_SEQ.seq = T.seq(+)
and  T.seq is null


대용량 테이블에서는 그리 좋은 방법인 아닐듯 하지만..

TAB_SEQ같은 정렬된 채번 테이블을 미리 생성 후 실행하면 될듯 합니다.

by 사랑초 [2013.10.28 15:52:30]
제 개인적인 소견으로는  "연속된 순번 테이블" 이라는 테이블을 생성하고
"채번하고자 하는 순번 테이블" 이라는 테이블과 서로 순번 값을 조인하면 될 것으로 보입니다만...
움... 더 좋은 방법은 고수 분들이 댓글 달아주실듯^^;;

by 우리집아찌 [2013.10.28 16:12:37]
WITH T ( SEQ ) AS (
SELECT 1 FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
--SELECT 3 FROM DUAL UNION ALL
SELECT 4 FROM DUAL UNION ALL
SELECT 5 FROM DUAL UNION ALL
SELECT 6 FROM DUAL UNION ALL
SELECT 7 FROM DUAL 
)

SELECT NVL(MIN(CASE WHEN SEQ <> ROWNUM THEN ROWNUM END),NVL(MAX(SEQ),0)+1)
FROM
(SELECT SEQ FROM T ORDER BY SEQ )

by 마농 [2013.10.28 16:58:59]
SELECT NVL(MIN(seq), 0) + 1 new_seq
  FROM (SELECT seq
             , LEAD(seq, 1, seq) OVER(ORDER BY seq) next_seq
          FROM t
        )
 WHERE seq + 1 != next_seq
   AND ROWNUM = 1
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입