删除完全重复

pet*_*ter 5 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

Year    ID   Name   Type
2015    200  John   S
2014    100  Peter  T
Run Code Online (Sandbox Code Playgroud)

我尝试过使用Row_number但不知道如何删除

Aar*_*and 14

我假设您要保留一行,而不是删除一行.还不清楚您是否只想定位这组特定值或处理所有重复项集.

;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;
Run Code Online (Sandbox Code Playgroud)

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

DELETE x WHERE r = 1;
Run Code Online (Sandbox Code Playgroud)

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

我还建议远离坏列名称yeartype(在很多情况下它们需要方括号)和ID(这意味着什么?).