Oracle
 sql >> база данни >  >> RDS >> Oracle

SQL:Трябва да премахнете дублирани редове в заявката

Тъй като не знаете всичките си бизнес правила, различни от даденото от вас, ето по-общо решение.

Създайте друга таблица (или може би вашият модел на данни вече има такава) с възможните състояния в тях:

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

Тази таблица се използва за класиране на статусите по ред на приоритет. С други думи, ако „Искан отказ“ трябва да бъде избран пред „Отхвърлен“ в случай на дубликати, тогава използвайте предимство от 1 за откази и 2 за откази.

Така че сега заявката може да използва тази допълнителна таблица за класиране:

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;

Има много начини действително да направите заявката, но това трябва да ви покаже общата идея.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL - може ли CASE да се използва в ограничение за проверка за определяне на атрибути на данни?

  2. Таблица, извлечена от Oracle sql - незадължително псевдоним

  3. Oracle Connection String за RAC среда?

  4. PL/SQL програма за отпечатване на данни за служителите

  5. Транспониране на избраните резултати с Oracle