sql >> Database >  >> RDS >> Oracle

SQL:dubbele rijen in query moeten worden verwijderd

Omdat je niet al je bedrijfsregels kent, behalve degene die je hebt gegeven, is hier een meer algemene oplossing.

Maak een andere tabel (of misschien heeft uw datamodel er al een) met de mogelijke statussen erin:

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

Deze tabel wordt gebruikt om de statussen in volgorde van prioriteit te rangschikken. Met andere woorden, als "Ontheffing aangevraagd" moet worden geselecteerd boven "Geweigerd" in het geval van duplicaten, gebruik dan een prioriteit van 1 voor vrijstellingen en 2 voor afwijzingen.

Dus nu kan de zoekopdracht gebruik maken van deze aanvullende ranglijst:

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;

Er zijn talloze manieren om de query daadwerkelijk uit te voeren, maar dit zou u het algemene idee moeten laten zien.



  1. 1 hele grote tafel of 3 grote tafels? MySQL-prestaties

  2. Ontvang de zondagsdatum tussen twee datums en de laatste dag van een maand mysql

  3. Hoe kan ik het aantal berichten tellen?

  4. Hoe de tabelwaardeparameter te WIJZIGEN