sql >> Databasteknik >  >> RDS >> Oracle

Oracle tar bort dubbletter baserat på ett villkor

Du kan uppnå detta genom att använda följande fråga:

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)

Jag antar att du bara behöver ta bort poster där det är netamount = 0 , Om inte, kommentera nedan.

Om du vill behålla en post som inte är noll och radera alla andra (för alla nollor, en post med noll som netamount kommer att behållas) så kan du använda följande fråga:

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

Skål!!



  1. Classic ADO.NET - Hur skickar jag UDT till lagrad procedur?

  2. LOAD DATA LOCAL INFILE fungerar inte från php 5.5 med PDO

  3. Finns det ett MySQL-alternativ/-funktion för att spåra historik över ändringar i poster?

  4. Är överföring via databaslänk i Oracle 10g komprimerad? Är det möjligt?