このディレクトリの索引 http://hibari.2ch.net/test/read.cgi/db/1294641578/678 # point順に並び替え、ランクを表示する # # テーブル名 :tbl_point # フィールド名:point # name # gender # # 表示 :p_rank, name, gender, point # # select rank() over (order by [point] desc) as [p_rank], name, point from [tbl_point]; # # p_rank | name | gender | point # # 1 | hoge | 1 | 98 # 2 | fuga | 2 | 80 # 3 | poyo | 2 | 70 # 4 | boke | 1 | 60 # # ここまではできるのですが # # p_rank | mp_rank | wp_rank | name | gender | point # # 1 | 1 | | hoge | 1 | 98 # 2 | | 1 | fuga | 2 | 80 # 3 | | 2 | poyo | 2 | 70 # 4 | 2 | | boke | 1 | 60 # # gender毎のも表示するにはどうすればいいですか? # 'gender毎のも表示する' :- ランクの作成(LL_R,LL1_R,LL2_R), write('p_rank | mp_rank | wp_rank | name | gender | point\n\n'), append(L0,[[_point,_gender,_name]|R],LL_R), 性別ランクを得る(LL1_R,LL2_R,_name,_gender,_mp_rank), 表示する(L0,_point,_name,_gender,_mp_rank), R = []. ランクの作成(LL_R,LL1_R,LL2_R) :- ポイントランクの作成(LL_R), 男性ランクの作成(LL1_R), 女性ランクの作成(LL2_R). ポイントランクの作成(LL_R) :- findall([_point,_name,_gender],( tbl_point(_point,_name,_gender)), LL), rsort(LL,LL_R),!. 男性ランクの作成(LL1_R) :- findall([_point,_name],( tbl_point(_point,_name,1)), LL1), rsort(LL1,LL1_R). 女性ランクの作成(LL2_R) :- findall([_point,_name],( tbl_point(_point,_name,2)), LL2), rsort(LL2,LL2_R), 性別ランクを得る(LL1_R,LL2_R,_name,1,_rank) :- nth1(_rank,LL1_R,[_,_name]),!. 性別ランクを得る(LL1_R,LL2_R,_name,2,_rank) :- nth1(_rank,LL2_R,[_,_name]),!. 表示する(L0,_point,_name,1,_mp_rank) :- length([_|L0],_p_rank), writef('%7l|%9c|%9c|%6c|%8c|%6r\n',[_p_rank,_mp_rank,' ',_name,1,_point]),!. 表示する(L0,_point,_name,2,_wp_rank) :- length([_|L0],_p_rank), writef('%7l|%9c|%9c|%6c|%8c|%6r\n',[_p_rank,' ',_wp_rank,_name,2,_point]),!. rsort(L1,L2) :- sort(L1,L3), reverse(L3,L2).