DB

【SQL】数値列の空き番号(歯抜け)を取得する方法

SQLで空き番号(歯抜け)を取得する方法です。
いつも忘れるのでメモ。

欲しい条件は↓

  • 空き番号または最大値 + 1
  • 1が歯抜けの場合は1がほしい
  • レコード未登録または数値未登録の場合1がほしい

以下、Oracle – SQLのサンプルです。

select 
    case  
        when min(tbl1.COL_NUMBER) != 1 then 1
        when min(tbl1.COL_NUMBER) is null then 1
        else min(tbl2.COL_NUMBER) + 1
    end as NUMBERING
from  
   TBL_NUMBER tbl1
   ,(
    select 
        COL_NUMBER
    from 
        TBL_NUMBER
    where 
        (COL_NUMBER + 1) not in (
                               select 
                                   COL_NUMBER 
                               from 
                                   TBL_NUMBER
                               )
    ) tbl2;

tbl1は、1が歯抜け or レコード未登録または数値未登録の検査用テーブル。
tbl2は、対象列 + 1が存在しないレコードの取得用テーブル。

RDBMS固有の関数などを使っていないため、大抵のRDBMSでいけると思います。
わりとよく使うけど、頻繁に忘れるので備忘録として。

参考までに。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です