我需要能夠找到一些重複的行,以便我可以更新除了其中一個以外的所有已刪除的標誌。根據兩列查找重複項
假設表格被稱爲tblMR
,我需要找到共享LoadManifestID
和VINid
的副本,然後我需要能夠選擇一個並進行更新。每個人都有一個獨特的列EntryLineNo
我還沒有嘗試過任何東西,因爲我不知道從哪裏開始。
我需要能夠找到一些重複的行,以便我可以更新除了其中一個以外的所有已刪除的標誌。根據兩列查找重複項
假設表格被稱爲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
如果可行,請繼續查找所有EntryLine
的重複項數。
SELECT LeadManifestID, VINid, count(*)
FROM EntryLine
如果這樣的作品,儘量爲每個組的EntryLine
尋找確定性EntryLineNo
。
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
,並且簡化了這個過程。
請閱讀[**如何問**](http://stackoverflow.com/help/how-to-ask) \t \t \t和[**如何創建一個最小的,完整的,並且可驗證的例子。**](http://stackoverflow.com/help/mcve) 這是一個很好的開始\t http://spaghettidba.com/2015/04/24/how-to-post-at-sql -question-on-a-public-forum/ –
如何通過查找「重複」開始?如果他們都有獨特的EntryLineNo,你想更新哪一個? –