トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

7-29 空き番号を取得その2

SQLパズル

以下のテーブルから空き番号を取得する。

No
--
 1
 2
 3
 6
 7
 9
10
14

出力結果
 空き
-----
  4-5
    8
11-13


データ作成スクリプト

create table NoTable2(No number(2));

insert into NoTable2 values( 1);
insert into NoTable2 values( 2);
insert into NoTable2 values( 3);
insert into NoTable2 values( 6);
insert into NoTable2 values( 7);
insert into NoTable2 values( 9);
insert into NoTable2 values(10);
insert into NoTable2 values(14);
commit;


SQL

col 空き for a8

select
LPad(case when No-LagNo=2 then to_char(No-1)
          else to_char(LagNo+1) || '-' || to_char(No-1) end,5) as 空き
from (select No,
      Lag(No) over(order by No) as LagNo
      from NoTable2)
where No-LagNo!=1
order by No;


解説

case式で、前のNoとの差に応じて、出力を分岐させて、
LPad関数で空白埋めしてます
前のNoとの差が2以上でないレコードは出力しないようにしてます。

7-28 空き番号を取得その1
7-30 空き番号を取得その3