Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle изтрива дубликати въз основа на условие

Можете да постигнете това, като използвате следната заявка:

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)

Предполагам, че трябва да изтриете само записи, където е netamount = 0 , Ако не, коментирайте по-долу.

Ако искате да запазите един ненулев запис и да изтриете всички останали (В случай на всички нули, един запис с нула като netamount ще бъдат запазени), тогава можете да използвате следната заявка:

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

Наздраве!!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Все още ли трябва да инсталирам Oracle Client, ако използвам Microsoft ODBC за Oracle за свързване към база данни на Oracle?

  2. Вмъкнете дата в Oracle

  3. Как да използвам ключовата дума 'as' за псевдоним на таблица в Oracle?

  4. Синтаксисът на Oracle отляво свързва три или повече таблици

  5. Как мога да комбинирам няколко реда в списък, разделен със запетая в Oracle?