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

Oracle usuwa duplikaty na podstawie warunku

Możesz to osiągnąć za pomocą następującego zapytania:

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)

Zakładam, że musisz usunąć tylko te rekordy, w których jest to netamount = 0 , Jeśli nie, skomentuj poniżej.

Jeśli chcesz zachować jeden niezerowy wpis i usunąć wszystkie inne (w przypadku wszystkich zer, jeden wpis z zerem jako netamount zostaną zachowane), możesz użyć następującego zapytania:

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
    );

Pozdrawiam!!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zewnętrzna pomoc w wyroczni

  2. Bezpłatne lub próbne środowisko bazy danych Oracle

  3. Błąd :ORA-06553:PLS-306:błędna liczba lub typy argumentów w wywołaniu procedury

  4. Czy możesz mieć INNER JOIN bez słowa kluczowego ON?

  5. ORA-00604:wystąpił błąd na rekurencyjnym poziomie SQL 1