このディレクトリの索引

# 出典 :: SQL質疑応答スレ 10問目 #815 # こんなレコードが格納されているとします。 # ID,NO # 100,1 # 102,2 # 101,3 # 200,1 # 201,2 # 202,3 # この場合、IDを100番台、200番台でグルーピングして、各グループ毎にNO順にSELECTで出力しようとした場合、どのような条件にすればよいでしょうか? # IDはこの例では3桁ですが、実際には6桁程あり、出来ればWHERE句で数字を入れて指定するような事はせずに並び替えが出来ると嬉しいです。 # 要は、レコードが増えてグループが増えたりしても、条件を変えずに並び替えが出来るようなものが良いのですが、可能でしょうか? # 宜しくご教示願います。 # # テーブル(100,1). テーブル(102,2). テーブル(101,3). テーブル(200,1). テーブル(201,2). テーブル(202,3). 'IDを100番台、200番台でグルーピングして、各グループ毎にNO順に出力する' :- 'IDを100番台、200番台でグルーピングして、'(_グループならび), '各グループ毎にNO順に出力する'(_グループならび). 'IDを100番台、200番台でグルーピングして、'(_グループならび) :- setof(_グループ,[_ID,_NO,_グループ] ^ (テーブル(_ID,_NO),_グループ is _ID // 100),_グループならび). '各グループ毎にNO順に出力する'(_グループならび) :- forall(各グループ毎に(_グループならび,_グループ),NO順に出力する(_グループ)). 各グループ毎に(_グループならび,_グループ) :- member(_グループ,_グループならび). 'NO順に出力する'(_グループ) :- forall('NO順に'(_グループ,_ID,_NO),出力する(_グループ,_ID,_NO)). 'NO順に'(_グループ,_ID,_NO) :- setof([_NO,_ID],[_ID,_NO,_グループ] ^ (テーブル(_ID,_NO),_グループ is _ID // 100),LL), member([_NO,_ID],LL). 出力する(_グループ,_ID,_NO) :- writef('%w, %w, %w\n',[_グループ,_ID,_NO]).