それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

SQLで連番を作成や配列をカラム・行に展開する

SQL で連番を扱うときに

SQL で連番を扱うときに、数字が入った配列が有るととても便利です。ただしソレを作成するのは不便です。

0..9

これを、次のようなテーブル行に展開したい。

:id
0
1
2
3
4
5
6
7
8
9

SQLで配列を展開するように行にする。

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 9
 union select 9
;

結果

0
----------
0
2
3
4
5
6
7
9

N個に展開してJOINすると

N個に展開して直積を取ってあげると、結構好きにテーブル展開を扱えるようになる。テーブルのピボットや、空席を調べたり欠番を埋めるのに作りやすくなる。

便利

ちょっといじれば10x10x10 の直積で

1000行作ったり出来る。なんか楽しい

select * from (
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 9
 union select 9
) as  a
left join  (
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 9
 union select 9
) as b
left join  (
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 9
 union select 9
) as c
;

参考

https://stackoverflow.com/questions/1564956/how-can-i-select-from-list-of-values-in-sql-server

https://codezine.jp/article/detail/1076