Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

SQL:Precisa remover linhas duplicadas na consulta


Não conhecendo todas as suas regras de negócios além daquela que você deu, aqui está uma solução mais geral.

Crie outra tabela (ou talvez seu modelo de dados já tenha uma) com os possíveis status nelas:
CREATE TABLE status_rank (
   status   VARCHAR2(100) NOT NULL,
   rank     NUMBER NOT NULL,
   PRIMARY KEY (status_name)
);

Esta tabela é usada para classificar os status em ordem de precedência. Em outras palavras, se "Isenção solicitada" deve ser selecionada em vez de "Rejeitada" no caso de duplicatas, use uma precedência de 1 para isenções e 2 para rejeições.

Então agora a consulta pode fazer uso desta tabela de classificação adicional:
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;

Existem várias maneiras de realmente fazer a consulta, mas isso deve mostrar a ideia geral.