我使用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) –