Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL:trzeba usunąć zduplikowane wiersze w zapytaniu

Nie znając wszystkich reguł biznesowych innych niż te, które podałeś, oto bardziej ogólne rozwiązanie.

Utwórz kolejną tabelę (lub być może Twój model danych już ją posiada) z możliwymi statusami w niej:

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

Ta tabela służy do uszeregowania statusów w kolejności pierwszeństwa. Innymi słowy, jeśli w przypadku duplikatów należy wybrać opcję „Wniosek o zrzeczenie się” zamiast „Odrzucono”, należy zastosować pierwszeństwo 1 w przypadku zwolnień i 2 w przypadku odrzucenia.

Więc teraz zapytanie może skorzystać z tej dodatkowej tabeli rankingowej:

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;

Istnieje wiele sposobów na wykonanie zapytania, ale powinno to pokazać ogólną ideę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12015:nie można utworzyć zmaterializowanego widoku szybkiego odświeżania ze złożonego zapytania

  2. Nietrywialne połączenie dwóch tabel

  3. Brak pełnego mnożenia serii (iloczynu) w zapytaniu CONNECT-BY

  4. Najpopularniejsze zapytania dotyczące klucza podstawowego w Oracle z przykładami

  5. Wyszukiwanie tekstu w procedurach składowanych Oracle