sql >> Database >  >> RDS >> Oracle

Oracle verwijdert duplicaten op basis van een voorwaarde

U kunt dit bereiken met de volgende 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)

Ik neem aan dat je alleen records hoeft te verwijderen waar het netamount = 0 is , Zo niet, reageer dan hieronder.

Als u één niet-nul invoer wilt behouden en alle andere wilt verwijderen (In het geval van alle nullen, één invoer met nul als netamount wordt bewaard), kunt u de volgende zoekopdracht gebruiken:

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

Proost!!



  1. MySql:maak deze query sneller... is er een manier?

  2. Hibernate - Hoe kan ik de juiste toewijzing aan het type integer geven?

  3. Tijdelijk databaseontwerp, met een twist (live vs conceptrijen)

  4. Retourneer NULL als Count(*) nul is