考虑名为EmployeeName
表Employee
的列。目标是根据EmployeeName
字段删除重复的记录。
EmployeeName
------------
Anand
Anand
Anil
Dipak
Anil
Dipak
Dipak
Anil
使用一个查询,我想删除重复的记录。
如何在SQL Server中使用TSQL实现这一点?
发布于 2010-07-23 23:22:01
您可以使用窗口函数来实现这一点。它将按empId对副本进行排序,并删除除第一个副本之外的所有副本。
delete x from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;
将其作为select运行,以查看要删除的内容:
select *
from (
select *, rn=row_number() over (partition by EmployeeName order by empId)
from Employee
) x
where rn > 1;
发布于 2010-07-23 19:02:17
您可以尝试执行以下操作:
delete T1
from MyTable T1, MyTable T2
where T1.dupField = T2.dupField
and T1.uniqueField > T2.uniqueField
(假设您有一个基于整数的唯一字段)
不过,就我个人而言,您最好尝试在数据库发生之前纠正重复条目被添加到数据库的事实,而不是作为修复后操作。
发布于 2010-07-25 19:30:41
WITH CTE AS
(
SELECT EmployeeName,
ROW_NUMBER() OVER(PARTITION BY EmployeeName ORDER BY EmployeeName) AS R
FROM employee_table
)
DELETE CTE WHERE R > 1;
通用表表达式的魔力。
https://stackoverflow.com/questions/3317433
复制相似问题