Oracle
 sql >> Database >  >> RDS >> Oracle

SQL:è necessario rimuovere le righe duplicate nella query

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.