我在表中有大约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但不确定如何删除
答案 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;
如果您只想处理此设置,请移除/*
和*/
。
我还建议远离错误的列名,例如year
和type
(在很多情况下它们需要方括号)和ID
(这意味着什么?)。< / p>