2017-06-15 38 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