Sql server 基于两列查找重复项
我需要能够找到一些重复的行,这样我就可以更新除其中一行之外的所有行上的已删除标志 假设该表名为Sql server 基于两列查找重复项,sql-server,duplicates,Sql Server,Duplicates,我需要能够找到一些重复的行,这样我就可以更新除其中一行之外的所有行上的已删除标志 假设该表名为tblMR,我需要找到共享LoadManifestID和VINid的重复项,然后我需要能够选择一个并进行更新。每个都有一个独特的EntryLineNo列 我还没有尝试过任何东西,因为我不知道从哪里开始。你真的需要发布更多的细节,让帮助的人更清楚、更容易,但我认为这与你想要的非常接近 with FindDupes as ( select LoadManifestID , VINid
tblMR
,我需要找到共享LoadManifestID
和VINid
的重复项,然后我需要能够选择一个并进行更新。每个都有一个独特的EntryLineNo列
我还没有尝试过任何东西,因为我不知道从哪里开始。你真的需要发布更多的细节,让帮助的人更清楚、更容易,但我认为这与你想要的非常接近
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
你应该从哪里开始 尝试查询所有
EntryLine
SELECT *
FROM EntryLine
SELECT LeadManifestID, VINid, count(*)
FROM EntryLine
SELECT MIN(EntryLineNo), LeadManifestID, VINid, count(*)
FROM EntryLine
如果有效,则继续查找所有EntryLine
的重复数
SELECT *
FROM EntryLine
SELECT LeadManifestID, VINid, count(*)
FROM EntryLine
SELECT MIN(EntryLineNo), LeadManifestID, VINid, count(*)
FROM EntryLine
如果可行,请尝试为每组EntryLine
查找确定性EntryLine
SELECT *
FROM EntryLine
SELECT LeadManifestID, VINid, count(*)
FROM 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
虽然这是一个相当浪费的方法,但它绝对是一个好的开始。从那时起,您可以查看
行号
,从而简化流程。请阅读,这是一个很好的起点,从查找“重复项”开始如何?如果他们都有一个唯一的EntryLineNo,您希望更新哪一个?