我需要能够找到一些重复的行,这样我就可以在除了其中一个之外的所有行上更新已删除的标志。
假设该表名为tblMR
,我需要找到共享LoadManifestID
和VINid
的重复项,然后我需要选择一个并进行更新。每个都有一个唯一的EntryLineNo列
我还没有尝试任何事情,因为我不知道从哪里开始。
答案 0 :(得分:1)
你真的需要发布更多细节,以便让人们更清楚,更轻松地帮助,但我认为这非常接近你所寻找的。 p>
with FindDupes as
(
select LoadManifestID
, VINid
, ROW_NUMBER() over(partition by LoadManifestID, VINid order by EntryLineNo) as RowNum
from tblMR
)
update m
set IsDeleted = 1
from tblMR m
join FindDupes d on d.LoadManifestID = m.LoadManifestID
and d.VINid = m.VINid
where d.RowNum > 1
答案 1 :(得分:0)
你应该从哪里开始?
尝试查询所有EntryLine
。
SELECT *
FROM EntryLine
如果可行,请继续查找所有EntryLine
的重复项数量。
SELECT LeadManifestID, VINid, count(*)
FROM EntryLine
如果可行,请尝试为每组EntryLineNo
找到确定性EntryLine
。
SELECT MIN(EntryLineNo), LeadManifestID, VINid, count(*)
FROM EntryLine
完成后,您需要查找所有重复的行,但不要共享预先选择的EntryLineNo
。
SELECT *
FROM EntryLine e INNER JOIN (
SELECT MIN(EntryLineNo) AS KeptNo, LeadManifestID, VINid, count(*)
FROM EntryLine
) e2 ON e.VINid = e2.VINid AND e.LeadManifestID = e2.VINid AND e2.KeptNo != e.EntryLineNo
然后,您只需更新表
UPDATE
e
SET
toBeDelted = true
FROM
SELECT *
FROM EntryLine e INNER JOIN (
SELECT MIN(EntryLineNo) AS KeptNo, LeadManifestID, VINid, count(*)
FROM EntryLine
) e2 ON e.VINid=e2.VINid AND e.LeadManifestID=e2.VINid AND e2.KeptNo!=e.EntryLineNo
这是一个非常浪费的方法,但它绝对是一个很好的开始方式。从那时起,您可以查看ROW_NUMBER
,并简化过程。