Sql Oracle根据条件删除重复项
我试图从表中删除一些重复项,并试图为ID1列保留其中一个重复项 使用此查询,我根据ROWID成功地删除了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
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,现在我需要随机保留其中一个。