Non conoscendo tutte le regole aziendali diverse da quella che hai fornito, ecco una soluzione più generale.
Crea un'altra tabella (o forse il tuo modello di dati ne ha già una) con i possibili stati in esse:
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
Questa tabella viene utilizzata per classificare gli stati in ordine di precedenza. In altre parole, se è necessario selezionare "Rinuncia richiesta" su "Rifiutato" in caso di duplicati, utilizzare una precedenza di 1 per le esenzioni e 2 per i rifiuti.
Quindi ora la query può utilizzare questa tabella di classificazione aggiuntiva:
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;
Esistono numerosi modi per eseguire effettivamente la query, ma questo dovrebbe mostrarti l'idea generale.