Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle supprime les doublons en fonction d'une condition

Vous pouvez y parvenir en utilisant la requête suivante :

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)

Je suppose que vous devez supprimer uniquement les enregistrements où il est netamount = 0 , Si ce n'est pas le cas, commentez ci-dessous.

Si vous souhaitez conserver une entrée non nulle et supprimer toutes les autres (en cas de tous les zéros, une entrée avec zéro comme netamount sera conservé) alors vous pouvez utiliser la requête suivante :

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

Bravo !