我想删除XRDK / ENAUDFP_RK中的重复记录,我已经尝试了一个' where exists'带有以下SQL的子句,但这删除了文件中的所有记录,而不仅仅是重复项。
给一点背景;这里的问题是一个重复的每日销售文件 - 商店完全有可能每天销售超过1个相同的商品,因此一些副本实际上不是重复的,只有每隔一行都是重复的。
即。如果商店出售其中2个相同的商品,则会有4个记录--2个正品销售,2个重复。
这是我用来突出重复项的SQL;
SELECT * FROM
(SELECT ROWNUMBER() OVER (
PARTITION BY
INCOMP, INTTYP, INTDAT, INMDAT, INSDAT, INTCCY, INERAT, INDEPT,
INSTYL, INCOLO, INMATL, INSIZE, INFIT, INVENX, INEAN, INSKU,
INBATC, INPSIT, INFSIT, INTSIT, INSUPP, INPONO, INSCCY, INREF1,
INREF2, INREF3, INSREF, INDREF, INUNIT, INRETL, INCOST, INLRET,
INLCST, INSCST, INFGRP, INFCAT, INFSEC, INTGRP, INTCAT, INTSEC,
INSTEN, INSTEV, INSVAT, INPLUL, INSVTF, INSFOR, INSFOV, INVCOD,
INTO01, INSP01, INSP02, INSP03, INFNUM, INFDES, INRCOD, INRC01,
INRC02, INRC03, INRC04, INRC05, INRC06, INRC07, INRC08, INRC09,
INRC10, INRV01, INRV02, INRV03, INRV04, INRV05, INRV06, INRV07,
INRV08, INRV09, INRV10, INDELD, INCUID, INIREF, INSOUR, INSNUM)
AS RN, ENAUDFP_RK.*
FROM XRDK/ENAUDFP_RK) AS A
WHERE RN in('2', '4', '6', '8', '10', '12')
答案 0 :(得分:1)
您可以在DB2中使用rrn
DELETE FROM XRDK/ENAUDFP_RK f0
WHERE rrn(f0) in (
SELECT RW FROM
(SELECT ROWNUMBER() OVER (
PARTITION BY
INCOMP, INTTYP, INTDAT, INMDAT, INSDAT, INTCCY, INERAT, INDEPT,
INSTYL, INCOLO, INMATL, INSIZE, INFIT, INVENX, INEAN, INSKU,
INBATC, INPSIT, INFSIT, INTSIT, INSUPP, INPONO, INSCCY, INREF1,
INREF2, INREF3, INSREF, INDREF, INUNIT, INRETL, INCOST, INLRET,
INLCST, INSCST, INFGRP, INFCAT, INFSEC, INTGRP, INTCAT, INTSEC,
INSTEN, INSTEV, INSVAT, INPLUL, INSVTF, INSFOR, INSFOV, INVCOD,
INTO01, INSP01, INSP02, INSP03, INFNUM, INFDES, INRCOD, INRC01,
INRC02, INRC03, INRC04, INRC05, INRC06, INRC07, INRC08, INRC09,
INRC10, INRV01, INRV02, INRV03, INRV04, INRV05, INRV06, INRV07,
INRV08, INRV09, INRV10, INDELD, INCUID, INIREF, INSOUR, INSNUM)
AS RN, f1.*, rrn(f1) RW
FROM XRDK/ENAUDFP_RK f1) AS A
WHERE A.RN in('2', '4', '6', '8', '10', '12')
)
答案 1 :(得分:0)
如果您可以识别重复项,则可以删除它们。我的例子用表“e2”
显示它delete from (
select * from (
select rownumber() over (partition by .....) as rn,
e2.*
from e2)
where mod(rn, 2) = 0 )
我的示例中的mod用于标识每一行。 你已经用rownumber()的想法在正确的轨道上开始了。