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)
如果您只想处理此设置,请删除/*和*/.
我还建议远离坏列名称year和type(在很多情况下它们需要方括号)和ID(这意味着什么?).