sql >> Databáze >  >> RDS >> Oracle

SQL:Potřebujete odstranit duplicitní řádky v dotazu

Neznáte všechna svá obchodní pravidla kromě toho, které jste uvedli, zde je obecnější řešení.

Vytvořte další tabulku (nebo možná váš datový model již nějakou má) s možnými stavy v nich:

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

Tato tabulka se používá k seřazení stavů v pořadí priority. Jinými slovy, pokud by měla být v případě duplikátů vybrána možnost „Požadováno zřeknutí se“ před „Zamítnuto“, použijte prioritu 1 pro zřeknutí se a 2 pro odmítnutí.

Nyní tedy může dotaz využít tuto další tabulku hodnocení:

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;

Existuje mnoho způsobů, jak skutečně provést dotaz, ale toto by vám mělo ukázat obecnou představu.



  1. Instalace MySQL na CentOS 7

  2. Jak extrahovat více řetězců z jednotlivých řádků v SQL Server

  3. MySQL Workbench - Připojte se k Localhost

  4. Načtěte nejnovější řádek – starší než Oracle 12c