我使用sql删除重复记录,但它不工作。谁能帮我。如何从表sql服务器删除重复记录
我的SQL是
delete from VehicleInfoForParts where
Stock_Code not in
(
select max(Stock_Code) from VehicleInfoForParts group by stock_code,makeid,modelid
)
感谢
我使用sql删除重复记录,但它不工作。谁能帮我。如何从表sql服务器删除重复记录
我的SQL是
delete from VehicleInfoForParts where
Stock_Code not in
(
select max(Stock_Code) from VehicleInfoForParts group by stock_code,makeid,modelid
)
感谢
如果你在SQL Server 2005和了,你可以用一个CTE(公共表表达式)就实现这一目标:
;WITH DupData AS
(
SELECT Stock_Code, MakeID, ModelID,
ROW_NUMBER() OVER(PARTITION BY stock_code,makeid,modelid ORDER BY Stock_Code DESC) 'RowNum'
FROM
dbo.VehicleInfoForParts
)
DELETE FROM DupData
WHERE RowNum > 1
基本上,CTE中的SELECT
语句按照(stock_code,makeid,modelid)对数据进行分组 - 即这三个元素中的每个“组”都从一开始获取连续的row_number。数据按照stock_code
的顺序排列,因此最大的数字是第一个数字,因为它与RowNum = 1
一致 - 因此其他数据(具有RowNum > 1
)是重复的,可以删除。
您正在按照您希望获得最大值的列进行分组。你可能需要做的是为表中的每一行删除一行,其中该行的主ID不是最大值(或者如果第二行出错,则为最小值)。
DELETE
FROM VehicleInfoForParts t1
WHERE PrimaryID NOT IN (SELECT MIN(PrimaryID) FROM VehicleInfoForParts t2 WHERE t2.Stock_Code = t1.Stock_Code)
以下查询对删除重复行非常有用。此示例中的表具有标识作为标识列,具有重复数据的列是列1,列2和列3。
DELETE
FROM TableName
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM TableName
GROUP BY Column1, Column2, Column3
)
确保以下查询仅返回要保留的ID列表。通过stock_code,makeid,modelid从VehicleInfoForParts组中选择max(Stock_Code) –