2017-06-15 42 views
0

我有列和行我的表如下SQL服務器 - 刪除基於不同行的另一場重複的行

col0 col1 col2 col3 col4 
---------------------------- 
1  A  1  100 AA 
2  B  2  200 BB 
3  B  1  100 AA 
4  A  2  200 BB 

我想最後的結果是

col0 col1 col2 col3 col4 
---------------------------- 
1  A  1  100 AA 
2  B  2  200 BB 

OR

col0 col1 col2 col3 col4 
---------------------------- 
3  B  1  100 AA 
4  A  2  200 BB 

我想刪除第一行和第二行 OR 第三行和第四行但基於col1,正如您所看到的,除了col0之外,它們與其他行不同,因爲col0是主鍵。我應該如何處理sql server express 2012?

回答

0

您可以使用此

DELETE FROM yourTable 
WHERE col0 NOT IN (SELECT MIN(col0) FROM yourTable GROUP BY col1) 
+0

是的,這是完美的工作!但是,如果重複行是千行,那麼查詢的影響是什麼? – FannyKaunang

+0

你有什麼問題?它會變慢嗎? –

+0

我只是感到擔心,如果該查詢刪除錯誤的記錄哈哈。無論如何謝謝你的幫助@ tien – FannyKaunang

1

以下是刪除第一對重複記錄的選項。您可以根據四個數據列的分區分配行號。做到這一點的CTE,然後刪除從CTE所有記錄行數爲1

WITH cte AS (
    SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY col2, col3, col4 ORDER BY col0) rn 
    FROM yourTable 
) 
DELETE 
FROM cte 
WHERE rn = 1 

按照下面的鏈接,這表明我的CTE的邏輯是正確的演示。

Demo

+0

仍然沒有工作,先生,他們的刪除同一行。如果iam包括col1,那麼沒什麼可刪除的 – FannyKaunang

+0

@fannykaunang抱歉,我沒有仔細查看您的數據。只要從分區中刪除'col1',它就可以工作。 –

+0

有刪除col2.col3和col4上的副本,但col1仍然重複先生,如果我從分區刪除col1 – FannyKaunang