このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1316769778/633
#  MySQL 5.1です。 
#   
#  create table staff_list( 
#  staff_id int(5) primary key //社員番号 
#  staff_name varchar(8) //社員名 
#  unit varchar(8) primary key //部署名 
#  ) 
#   
#  insert into staff_list (staff_id,staff_name,unit) values 
#  (1,'範馬','総務'), 
#  (2,'愚地','総務'), 
#  (3,'花山','総務'), 
#  (1,'高津','企画'), 
#  (2,'池谷','企画'), 
#  (3,'長嶋','企画'), 
#  (1,'鳩山','営業'), 
#  (2,'野田','営業'), 
#  (3,'小沢','営業'), 
#  (4,'枝野','営業') 
#   
#   
#   
#  このようなテーブルに対してSELECTをかける際、一度のクエリーで 
#  部署別にソートしたうえで、総務だけstaff_id降順で他を昇順で出したいと思っています。 
#   
#  order by unit,IF(staff_name='総務',staff_id desc,staff_id asc) 
#  などと試行してみているのですがうまくできません。 
#   
#  どなたかうまい方法をご存じないでしょうか。 
#   
#  よろしくお願いいたします。 
# 

スタッフリスト(1,範馬,総務).
スタッフリスト(2,愚地,総務).
スタッフリスト(3,花山,総務).
スタッフリスト(1,高津,企画).
スタッフリスト(2,池谷,企画).
スタッフリスト(3,長嶋,企画).
スタッフリスト(1,鳩山,営業).
スタッフリスト(2,野田,営業).
スタッフリスト(3,小沢,営業).
スタッフリスト(4,枝野,営業).

'このようなテーブルを選択する際、一度部署別にソートしたうえで、総務だけ社員番号降順で出したいと思っています。'(_部署名,_社員番号,_社員名) :-
        一度部署別にソートしたうえで(_部署名ならび),
        総務だけ社員番号降順で出したい(_部署名ならび,_部署名,_社員番号,_社員名).

一度部署別にソートしたうえで(_部署名ならび) :-
        findsetof(_部署名,(
                   スタッフリスト(_社員番号,_社員名,_部署名)),
                _部署名ならび).

総務だけ社員番号降順で出したい(_部署名ならび,_部署名,_社員番号,_社員名) :-
        member(_部署名,_部署名ならび),
        総務だけ社員番号降順で出したい(_部署名,_社員番号,_社員名).

総務だけ社員番号降順で出したい(総務,_社員番号,_社員名) :-
        総務だけ社員番号降順で(_社員番号,_社員名).
総務だけ社員番号降順で出したい(_部署名,_社員番号,_社員名) :-
        \+(_部署名 == 総務),
        スタッフリスト(_社員番号,_社員名,_部署名).

総務だけ社員番号降順で(_社員番号,_社員名) :-
        findall([_社員番号,_社員名],(
                   スタッフリスト(_社員番号,_社員名,総務)),
               L1),
        降順でソート(L1,L2),
        member([社員番号,_社員名],L2).

降順でソート(L1,L2) :-
        sort(L1,L3),
        reverse(L3,L2).

%
% findsetof/3
%