Ank*_*pta 4 sql sql-server sql-server-2008
我有一个表 Emp 其中有这样的记录
Id Name
1 A
2 B
3 C
1 A
1 A
2 B
3 C
Run Code Online (Sandbox Code Playgroud)
现在我想从表中删除重复行我正在使用此查询来选择或计算重复记录的数量
SELECT NameCol, COUNT(*) as TotalCount FROM TestTable
GROUP BY NameCol HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)
我应该编写什么查询来删除表中的重复行。
如果我编写此查询来删除重复记录,那么它会给出结果(0) row Affected。
`DELETE FROM TestTable
WHERE ID NOT IN ( SELECT MAX(ID) FROM
TestTable
GROUP BY NameCol
)`
Run Code Online (Sandbox Code Playgroud)
对于 sqlserver 2005+
测试数据:
declare @t table(Id int, Name char(1))
insert @t values
(1,'A'),(2,'B'),(3,'C'),(1,'A'),(1,'A'),(2,'B'),(3,'C')
Run Code Online (Sandbox Code Playgroud)
删除语句(将@t替换为您的Emp表)
;with a as
(
select row_number() over (partition by id, name order by id) rn
from @t
)
delete from a where rn > 1
select * from @t
Run Code Online (Sandbox Code Playgroud)