Oracle
 sql >> Base de données >  >> RDS >> Oracle

SQL :besoin de supprimer les lignes en double dans la requête

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.