0

我想要求您刪除重複項,但仍保留特定項。通過考慮特定條件刪除重複

SerWorkNumber is du

,如果有一個「FD」中的代碼不應該刪除它的類型。

我將非常apprecated的任何幫助。我被困在:( 謝謝

+0

什麼版本的SQL您使用的是? –

+0

謝謝@Tim Biegeleisen。我用MSACCESS – Sero

+0

我寫的代碼是 > DELETE CD_FD。[SerWorkNumber],CD_FD。[的SerialNo],CD_FD。[ServiceCenter],CD_FD。[ReceivedDate],CD_FD。[類型] FROM CD_FD WHERE((( CD_FD。[SerWorkNumber])In(SELECT [SerWorkNumber] FROM [CD_FD] As Tmp GROUP BY [SerWorkNumber] HAVING Count(*)> 1))AND((CD_FD。[Type])=「CD」)); – Sero

回答

0

最簡單的方法來做到這一點,是每行都有一個唯一的標識符,所以如果你還沒有一個,創建一個名爲「row_id」的新列並設置它到自動編號保存表格,你現在應該在每一行有一個唯一的ID

接下來,你可以構造一個大的醜陋的sql來做你所需要的,但是如果你的表很大,它將不會很好地執行使用子查詢,所以最好使用臨時表來保存重複的行,然後引用它作爲刪除語句。

所以首先識別重複項,並存儲最小行ID

SELECT a.SerWorkNumber, a.SerialNo, a.Type, Min(a.row_id) AS MinOfrow_id INTO CD_FD_Dups 
FROM CD_FD AS a 
GROUP BY a.SerWorkNumber, a.SerialNo, a.Type 
HAVING count(1) > 1; 

接下來,從實際的表中刪除引用上面創建的臨時表:

DELETE 
FROM CD_FD AS a 
WHERE EXISTS (
SELECT 1 
FROM CD_FD_Dups d 
WHERE d.SerWorkNumber = a.SerWorkNumber 
     and d.SerialNo = a.SerialNo 
     and d.Type = a.Type 
     and a.row_id > d.MinOfrow_id 
);