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

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

SQLパズル

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

No
--
 1
 5
 9
14
21
22
24

出力結果
No   空き
--  -----
 1   null
 5    2-4
 9    6-8
14  10-13
21  15-20
22   null
24     23


データ作成スクリプト

create table NoTable1(No number(2));

insert into NoTable1 values( 1);
insert into NoTable1 values( 5);
insert into NoTable1 values( 9);
insert into NoTable1 values(14);
insert into NoTable1 values(21);
insert into NoTable1 values(22);
insert into NoTable1 values(24);
commit;


SQL

col 空き for a8

select No,
LPad(case when No-LagNo=1 or LagNo is null then null
          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 NoTable1)
order by No;


解説

case式で、前のNoとの差に応じて、出力を分岐させて、
LPad関数で空白埋めしてます。

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