Da Sie nicht alle Ihre Geschäftsregeln außer der von Ihnen angegebenen kennen, ist hier eine allgemeinere Lösung.
Erstellen Sie eine weitere Tabelle (oder vielleicht hat Ihr Datenmodell bereits eine) mit den möglichen Status darin:
CREATE TABLE status_rank (
status VARCHAR2(100) NOT NULL,
rank NUMBER NOT NULL,
PRIMARY KEY (status_name)
);
Diese Tabelle wird verwendet, um die Status nach Priorität zu ordnen. Mit anderen Worten, wenn im Fall von Duplikaten „Verzicht beantragt“ statt „Abgelehnt“ ausgewählt werden soll, verwenden Sie eine Priorität von 1 für Verzichte und 2 für Ablehnungen.
Jetzt kann die Abfrage diese zusätzliche Ranking-Tabelle verwenden:
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;
Es gibt zahlreiche Möglichkeiten, die Abfrage tatsächlich durchzuführen, aber dies sollte Ihnen die allgemeine Idee verdeutlichen.