我正在尝试删除其中一张表中的所有重复项。它们都不是键或唯一的。尝试向Google提供一些解决方案,但它们似乎不起作用。
delete T1
from MyTable T1, MyTable T2
where T1.MyTableCustomer = T2.MyTableCustomer
and T1.MyTableCustomerId = T2.MyTableCustomerId
and T1.MyTableSoldToParty = T2.MyTableSoldToParty
因此,我要删除在所有列上已经存在具有完全相同值的相等行的所有行。
如何在SQL Server(2017)中将其存档?
答案 0 :(得分:4)
这很棘手,因为没有任何ID或唯一键,很难指定要删除的记录。但是,SQL Server确实提供了一种实现它的方法。我在this page上找到了一种解决方案,并将其适应了您的餐桌。试试这个:
WITH CTE AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY MyTableCustomer, MyTableCustomerId, MyTableSoldToParty ORDER BY MyTableCustomer, MyTableCustomerId, MyTableSoldToParty) AS RN
FROM MyTable
)
DELETE FROM CTE WHERE RN<>1
它的工作方式是分配一个附加列,该列基本上是所有相同记录的计数器,然后删除值大于1的记录。这将保留一个重复值,并删除所有其他值。