Тъй като не знаете всичките си бизнес правила, различни от даденото от вас, ето по-общо решение.
Създайте друга таблица (или може би вашият модел на данни вече има такава) с възможните състояния в тях:
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;
Има много начини действително да направите заявката, но това трябва да ви покаже общата идея.