我使用sql删除重复记录,但它无法正常工作。任何人都可以帮助我。
我的sql是
delete from VehicleInfoForParts where
Stock_Code not in
(
select max(Stock_Code) from VehicleInfoForParts group by stock_code,makeid,modelid
)
感谢
答案 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
)