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

Oracle xóa các bản sao dựa trên một điều kiện

Bạn có thể đạt được điều này bằng cách sử dụng truy vấn sau:

delete from  tabela.lorik O
where O.netamt = 0 
AND EXISTS (SELECT 1 FROM tabela.lorik I
WHERE I.ID = O.ID AND I.netamt <> 0)

Tôi giả định rằng bạn chỉ cần xóa các bản ghi có netamount = 0 , Nếu không thì hãy bình luận bên dưới.

Nếu bạn đang muốn giữ lại một mục nhập khác 0 và xóa tất cả các mục nhập khác (Trong trường hợp tất cả các số không, một mục nhập có số 0 là netamount sẽ được giữ lại) thì bạn có thể sử dụng truy vấn sau:

DELETE FROM TABELA.LORIK O
WHERE
    ROWID IN (
        SELECT
            RWID
        FROM
            (
                SELECT
                    ROWID AS RWID,
                    ROW_NUMBER() OVER(
                        PARTITION BY ID
                        ORDER BY
                            CASE
                                WHEN NETAMT = 0 THEN 2
                                ELSE 1
                            END
                    ) AS RN
                FROM
                    TABELA.LORIK
            )
        WHERE
            RN > 1
    );

Chúc mừng !!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thả các phân vùng cũ hơn 2 tháng

  2. Lỗi cài đặt Oracle 12c Ubuntu 17.04

  3. Giới thiệu về PL / SQL Thu thập hàng loạt trong Cơ sở dữ liệu Oracle

  4. Oracle PL / SQL - Lặp lại tên cột của bảng được xác định cục bộ

  5. truy vấn oracle để so sánh tất cả các hàng có cùng id trong một bảng