このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/684
#  ・DBMS名とバージョン 
#  Oracle 10g 
#  ・テーブルデーた 
#  create table aaa ( 
#      id number(5,0) primary key, -- 主キー 
#      nendo char(4), -- 年度 
#      tsuki char(2) -- 月 
#  ); 
#  insert into aaa values (1, '2012', '01'); 
#  insert into aaa values (2, '2012', '02'); 
#  insert into aaa values (3, '2012', '03'); 
#  insert into aaa values (4, '2012', '04'); 
#  insert into aaa values (5, '2012', '05'); 
#  ・欲しい結果 
#  id, nendo, tsuki 
#  -------------------- 
#  4, '2012', '04' 
#  5, '2012', '05, 
#  1, '2012', '01' 
#  2, '2012', '02' 
#  3, '2012', '03' 
#   
#  ・説明 
#  年度/月の昇順に並べたいです。 
#  2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。 
# 

'・テーブルデータ
create table aaa (
    id number(5,0) primary key, -- 主キー
    nendo char(4), -- 年度
    tsuki char(2) -- 月
);
insert into aaa values (1, '2012', '01');
insert into aaa values (2, '2012', '02');
insert into aaa values (3, '2012', '03');
insert into aaa values (4, '2012', '04');
insert into aaa values (5, '2012', '05');
・欲しい結果
id, nendo, tsuki
--------------------
4, '2012', '04'
5, '2012', '05,
1, '2012', '01'
2, '2012', '02'
3, '2012', '03'

・説明
年度/月の昇順に並べたいです。
2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。'(_id,_年度,_月) :-
        欲しい結果(_id,_年度,_月).


欲しい結果(_id,_年度,_月) :-
        setof(_年度,[_id,_年度,_月] ^ aaa(_id,_年度,_月),_年度ならび),
        member(_年度,_年度ならび),
        年度順に並べる(['04','05','06','07','08','09','10','11','12','01','02','03'],_id,_年度,_月).

年度順に並べる([_月|R],_id,_年度,_月) :-
        aaa(_id,_年度,_月).
年度順に並べる([_|R],_id,_年度,_月) :-
        年度順に並べる(R,_id,_年度,_月).