删除完全重复

时间:2013-01-16 20:51:36

标签: sql sql-server tsql sql-server-2008-r2

我在表中有大约2000个完全重复,我想删除其中一个有一种方法: 示例数据如下所示:

Year    ID   Name   Type
2015    200  John   S
2015    200  John   S 
2014    100  Peter  T
2014    100  Peter  T

我希望输出为:

Year    ID   Name   Type
2015    200  John   S
2014    100  Peter  T

我尝试过使用Row_number但不确定如何删除

1 个答案:

答案 0 :(得分:14)

我假设你想要 KEEP 一行,而不是 DELETE 一行。还不清楚你是否只想定位这组特定的值或处理所有重复项集。

;WITH x(y,i,n,t,r) AS 
(
  SELECT [Year], ID, Name, [Type],
    ROW_NUMBER() OVER (PARTITION BY [Year], ID, Name, [Type] ORDER BY [Year])
  FROM dbo.table_name
  /*
    WHERE [Year] = 2015
    AND ID = 200
    AND Name = 'John'
    AND [Type] = 'S'
  */
)
DELETE x WHERE r > 1;

如果要删除一行并保留1999个重复项,请将最后一行更改为:

DELETE x WHERE r = 1;

如果您只想处理此设置,请移除/**/

我还建议远离错误的列名,例如yeartype(在很多情况下它们需要方括号)和ID(这意味着什么?)。< / p>