如何从表sql server中删除重复记录

时间:2011-06-27 12:14:07

标签: sql-server

我使用sql删除重复记录,但它无法正常工作。任何人都可以帮助我。

我的sql是

delete from VehicleInfoForParts where
Stock_Code not in
(
select max(Stock_Code) from VehicleInfoForParts group by stock_code,makeid,modelid
)

感谢

3 个答案:

答案 0 :(得分:3)

如果您使用的是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)都是重复的,可以删除。

答案 1 :(得分:1)

您要按照您想要获取最大值的列进行分组。您可能需要做的是对表中的每一行删除一行,其中行的主要ID不是最大值(如果第二行出错,则为min)。

DELETE 
FROM VehicleInfoForParts t1
WHERE  PrimaryID NOT IN (SELECT MIN(PrimaryID ) FROM VehicleInfoForParts t2 WHERE t2.Stock_Code = t1.Stock_Code)

答案 2 :(得分:0)

以下查询对删除重复行很有用。此示例中的表具有ID作为标识列,具有重复数据的列是Column1,Column2和Column3。

DELETE

FROM TableName

WHERE ID NOT IN

(

SELECT MAX(ID)

FROM TableName

GROUP BY Column1, Column2, Column3

)