Omdat je niet al je bedrijfsregels kent, behalve degene die je hebt gegeven, is hier een meer algemene oplossing.
Maak een andere tabel (of misschien heeft uw datamodel er al een) met de mogelijke statussen erin:
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
Deze tabel wordt gebruikt om de statussen in volgorde van prioriteit te rangschikken. Met andere woorden, als "Ontheffing aangevraagd" moet worden geselecteerd boven "Geweigerd" in het geval van duplicaten, gebruik dan een prioriteit van 1 voor vrijstellingen en 2 voor afwijzingen.
Dus nu kan de zoekopdracht gebruik maken van deze aanvullende ranglijst:
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;
Er zijn talloze manieren om de query daadwerkelijk uit te voeren, maar dit zou u het algemene idee moeten laten zien.