5

我在表中有大约 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 但不知道如何删除

4

1 回答 1

15

我将假设您想保留一行,而不是删除一行。如果您只想针对这组特定的值或处理所有重复项,也不清楚。

;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;

如果您只想处理此集合,请删除/*and */

我还建议远离不好的列名,例如yearand type(在很多情况下它们需要方括号)和ID(这是什么意思?)。

于 2013-01-16T20:55:31.010 回答