Ne connaissant pas toutes vos règles métier autres que celle que vous avez donnée, voici une solution plus générale.
Créez une autre table (ou peut-être que votre modèle de données en a déjà une) avec les statuts possibles :
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
Ce tableau permet de classer les statuts par ordre de priorité. En d'autres termes, si "Waiver Requested" doit être sélectionné plutôt que "Rejected" dans le cas de doublons, utilisez une priorité de 1 pour les dérogations et de 2 pour les rejets.
La requête peut désormais utiliser ce tableau de classement supplémentaire :
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;
Il existe de nombreuses façons de faire la requête, mais cela devrait vous montrer l'idée générale.