このディレクトリの索引
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,_年度,_月).

年度の場合の月順('04','05').
年度の場合の月順('05','06').
年度の場合の月順('06','07').
年度の場合の月順('07','08').
年度の場合の月順('08','09').
年度の場合の月順('09','10').
年度の場合の月順('10','11').
年度の場合の月順('11','12').
年度の場合の月順('12','01').
年度の場合の月順('01','02').
年度の場合の月順('02','03').
年度の場合の月順('03','04').

欲しい結果(_id,_年度,_月) :-
        setof(_年度,[_id,_年度,_月] ^ aaa(_id,_年度,_月),_年度ならび),
        member(_年度,_年度ならび),
        年度順に並べる('04',_id,_年度,_月).

年度順に並べる(_月,_id,_年度,_月) :-
        aaa(_id,_年度,_月).
年度順に並べる(_月_1,_id,_年度,_月) :-
        \+(_月_1 = '03'),
        年度の場合の月順(_月,_次の月),
        年度順に並べる(_次の月,_id,_年度,_月).