Da du ikke kender alle dine forretningsregler udover den, du gav, er her en mere generel løsning.
Opret en anden tabel (eller måske har din datamodel allerede en) med de mulige statusser i dem:
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
Denne tabel bruges til at rangordne statuserne i prioriteret rækkefølge. Med andre ord, hvis "Waiver Requested" skal vælges frem for "Rejected" i tilfælde af dubletter, skal du bruge en forrang på 1 for frafald og 2 for afvisninger.
Så nu kan forespørgslen gøre brug af denne ekstra rangeringstabel:
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;
Der er adskillige måder at udføre forespørgslen på, men dette burde vise dig den generelle idé.