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

10-296 組み合わせ

SQLパズル

combテーブル
 i
--
 1
 2
 3
 4

combテーブルからiを選ぶ組み合わせの
結果と件数を求める

【結果例】
1個選ぶ場合、下記の4件
1
2
3
4

2個選ぶ場合、下記の7件
1,1
1,2
1,3
1,4
2,3
2,4
3,4

3個選ぶ場合、下記の4件
1,2,3
1,2,4
1,3,4
2,3,4

4個選ぶ場合、下記の1件
1,2,3,4


データ作成スクリプト

create table comb(i number(1) primary key);

insert into comb
select RowNum
  from all_catalog
 where RowNum <= 4;


SQL

create or replace function print_comb(LEV in number) return varchar2 IS
    件数 pls_Integer := 0;
    WillOut varchar2(4000);
begin
    for rec_Work in
    (select substr(sys_connect_by_path(to_char(i),','),2) as 組み合わせ
       from comb
      where Level = LEV
     connect by prior i < i) Loop
         WillOut := WillOut || '■' || rec_Work.組み合わせ;
         件数 := 件数 + 1;
    end Loop;
    return substr(WillOut,2) || '件数は' || to_char(件数) || '件';
end;
/
sho err

select RowNum as 引数,
print_comb(RowNum) as 結果
from all_catalog
where RowNum <= 4;


解説

階層問い合わせを使って、
組み合わせを列挙してます