Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SQL:Cần loại bỏ các hàng trùng lặp trong truy vấn

Không biết tất cả các quy tắc kinh doanh của bạn khác với quy tắc bạn đã đưa ra, đây là một giải pháp chung hơn.

Tạo một bảng khác (hoặc có thể mô hình dữ liệu của bạn đã có một bảng) với các trạng thái có thể có trong chúng:

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

Bảng này được sử dụng để xếp hạng các trạng thái theo thứ tự ưu tiên. Nói cách khác, nếu "Đã yêu cầu từ bỏ" nên được chọn thay vì "Bị từ chối" trong trường hợp trùng lặp, thì hãy sử dụng ưu tiên 1 cho các từ bỏ và 2 cho các từ chối.

Vì vậy, bây giờ truy vấn có thể sử dụng bảng xếp hạng bổ sung này:

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;

Có nhiều cách để thực sự thực hiện truy vấn, nhưng điều này sẽ cho bạn thấy ý tưởng chung.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thoát khỏi một từ dành riêng trong Oracle?

  2. Thời lượng lưu trữ BLOB trong oracle

  3. Lặp lại trên một cột trong PL / SQL

  4. Trả lại hàng có giá trị tối đa của một cột cho mỗi nhóm

  5. Định dạng đầu ra của các truy vấn trong SQLPlus