Куда вы должны начать?
Попробуйте запросить все 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
и упростить процесс.
пожалуйста, прочтите [** Как задать **] (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, который вы хотите обновить? –