Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle根据条件删除重复项_Sql_Oracle_Duplicates - Fatal编程技术网

Sql Oracle根据条件删除重复项

Sql Oracle根据条件删除重复项,sql,oracle,duplicates,Sql,Oracle,Duplicates,我试图从表中删除一些重复项,并试图为ID1列保留其中一个重复项 使用此查询,我根据ROWID成功地删除了 delete from tabela.lorik where ROWID not in ( select MAX(ROWID) from tabela.lorik GROUP BY ID1) 现在,我想删除NETAMT=0时发现的所有重复记录 您可以使用以下查询来实现这一点: delete from tabela.lorik O where O.netamt = 0

我试图从表中删除一些重复项,并试图为ID1列保留其中一个重复项

使用此查询,我根据ROWID成功地删除了

delete from    tabela.lorik
where ROWID not in (
select MAX(ROWID) 
from     tabela.lorik
GROUP BY ID1) 
现在,我想删除NETAMT=0时发现的所有重复记录


您可以使用以下查询来实现这一点:

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

您可以先按值排序rowid,然后按rowid排序。以下内容仅保留一行,优先选择最近的非零金额:

delete from tabela.lorik
where ROWID <> (select max(rowid) keep (dense_rank first (order by (case when amount = 0 then 1 else 2 end), rowid desc)
                from tabela.lorik l2
                where l2.id1 = l.id1
               )

如果所有的值都是0怎么办?@GordonLinoff如果在ID1中发现了一个重复项,那么所有重复项中的值都是0,然后随机选择。感谢您的帮助,它对值不同于0的ID有效。但是我有一些ID,在所有值中有0,现在我需要随机保留其中一个。