我试图从表中删除一些重复项,并尝试保留ID1列的重复项之一。
使用此查询,我设法根据ROWID进行删除。
.e { z-index: 3; }
.s { z-index: 2; }
现在,我要删除在NETAMT = 0时发现重复的所有那些记录
答案 0 :(得分: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)
我假设您只需要删除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 :(得分:0)
您可以先按值对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
)