Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL:Doppelte Zeilen in der Abfrage müssen entfernt werden

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.