sql >> Base de Datos >  >> RDS >> Oracle

SQL:es necesario eliminar las filas duplicadas en la consulta

Sin conocer todas las reglas de su negocio además de la que proporcionó, aquí hay una solución más general.

Cree otra tabla (o quizás su modelo de datos ya tenga una) con los posibles estados en ellas:

CREATE TABLE status_rank (
   status   VARCHAR2(100) NOT NULL,
   rank     NUMBER NOT NULL,
   PRIMARY KEY (status_name)
);

Esta tabla se utiliza para clasificar los estados en orden de prioridad. En otras palabras, si se debe seleccionar "Exención solicitada" en lugar de "Rechazado" en el caso de duplicados, utilice una precedencia de 1 para exenciones y 2 para rechazos.

Ahora la consulta puede hacer uso de esta tabla de clasificación 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;

Hay numerosas formas de hacer la consulta, pero esto debería mostrarle la idea general.