SQL で FizzBuzz (H2 編)

やるまでもないとかつまらないとかって書いたけど,せっかくカテゴリも作ったことなので書いておくテスト.

create table digit (n integer);
insert into digit (n) values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
select
  case
    when mod(n, 15) = 0 then 'FizzBuzz'
    when mod(n,  3) = 0 then 'Fizz'
    when mod(n,  5) = 0 then 'Buzz'
    else n
  end
from
  (select a.n * 10 + b.n + 1 n from digit a, digit b)
order by
  n;

やっぱりテーブル作るのがいやーん.
再帰問い合わせがあれば...
History and Roadmap」によると,大量の Priority 2 に埋もれてるので,当面は無理かなぁ.
やっぱり SQL Server のセットアップを待つか (笑).


P.S.
はぶさんから

subqueryにしたらいいだけだと思うんだけど。

というご指摘が.
でもでも,いい方法が思いつかなかったんだよね.
こんなのならできるんだけど.

select
  case
    when mod(n, 15) = 0 then 'FizzBuzz'
    when mod(n,  3) = 0 then 'Fizz'
    when mod(n,  5) = 0 then 'Buzz'
    else n
  end
from
  (select a.n * 10 + b.n + 1 n from
    (select 0 n union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) a,
    (select 0 n union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) b
  )
order by
  n;

こんなのだったらテーブル作った方がマシだと思うわけで.
同じような方法でもビューにすれば少しはマシだけど

create view digit (n) as select 0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9;
select
  case
    when mod(n, 15) = 0 then 'FizzBuzz'
    when mod(n,  3) = 0 then 'Fizz'
    when mod(n,  5) = 0 then 'Buzz'
    else n
  end
from
  (select a.n * 10 + b.n + 1 n from digit a, digit b)
order by
  n;

ビューを作るんならテーブルでも大差ないっていうか,UNION で並べるくらいならテーブルに INSERT する方がマシだよなぁってことで,やっぱり WITH〜 欲しい.
っていうか,副問い合わせでスマートな方法があるのだろうか?