Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle elimina i duplicati in base a una condizione

Puoi ottenere ciò utilizzando la seguente query:

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)

Presumo che sia necessario eliminare solo i record in cui è netamount = 0 , In caso contrario, commenta di seguito.

Se stai cercando di conservare una voce diversa da zero ed eliminare tutte le altre (in caso di tutti gli zeri, una voce con zero come netamount verranno mantenuti) quindi è possibile utilizzare la seguente query:

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

Ciao!!