あなたが与えたもの以外のあなたのビジネスルールのすべてを知らないので、ここにもっと一般的な解決策があります。
可能なステータスを含む別のテーブルを作成します(または、データモデルにすでにテーブルがあります):
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
このテーブルは、優先順位に従ってステータスをランク付けするために使用されます。つまり、重複する場合に「拒否」よりも「放棄要求」を選択する必要がある場合は、放棄に1、拒否に2の優先順位を使用します。
これで、クエリはこの追加のランキングテーブルを利用できるようになりました:
SELECT b.docid, r.status
FROM b,
status_rank r,
(SELECT b.id, min(r.rank)
FROM b, status_rank r
WHERE b.status = r.status
GROUP BY id) s
WHERE b.docid = s.docid
AND r.rank = s.rank
AND b.status = r.status;
実際にクエリを実行する方法は多数ありますが、これで一般的な考え方がわかるはずです。