Sql 需要从表中查找并删除重复记录
我需要从我的employee表中删除重复项,但如果重复项出现在同一个公司名称中,则应将其保留 我有以下数据Sql 需要从表中查找并删除重复记录,sql,sql-server,Sql,Sql Server,我需要从我的employee表中删除重复项,但如果重复项出现在同一个公司名称中,则应将其保留 我有以下数据 empid resource Dpart company 111 alex AA 1C 112 chris QA 2F 111 alex AA
empid resource Dpart company
111 alex AA 1C
112 chris QA 2F
111 alex AA 1C
111 alex AA 2F
111 alex AA 2F
111 alex AA 5F
我尝试了行数超额分配,但没有给出我期望的结果。请帮助我们
delete duplicates from (SELECT empid,
resouces,department ,ROW_NUMBER() OVER (PARTITION BY empid,
resouces,departmentORDER BY empid) cnt FROM
(select empid, resouces,department from Employee )t1)
duplicates WHERE duplicates.Cnt > 1
根据重复删除后的上述数据,Employee表应具有
empid resource Dpart company
111 alex AA 1C
112 chris QA 2F
111 alex AA 1C
使用密级
我认为你需要高密度的排名:
DELETE e
FROM (SELECT e.*,
DENSE_RANK() OVER (PARTITION BY empid, resource, Dpart ORDER BY company) AS Seq
FROM Employee e
) e
WHERE e.Seq > 1;
我举一个例子如下: -创建表
CREATE TABLE dbo.DiaChiEmail(
ID INT IDENTITY PRIMARY KEY,
Email VARCHAR(100),
Ten NVARCHAR(100)
)
GO
-插入一些记录
INSERT dbo.DiaChiEmail(Email,Ten)
SELECT 'abc@gmail.com', 'abc' UNION ALL -- #1
SELECT 'def@yahoo.com', 'def' UNION ALL -- #2
SELECT 'ghi@hotmail.com', 'ghi' UNION ALL -- #3
SELECT 'jkl@ymail.com', 'jkl' UNION ALL -- #4
SELECT 'abc@gmail.com', 'abc 2' UNION ALL -- #5, dupl with #1
SELECT 'abc@gmail.com', 'abc 3' UNION ALL -- #6, dupl with #1
SELECT 'ghi@hotmail.com', 'ghi 2' -- #7, dupl with ghi #3
删除重复记录的查询是:
WITH [TBL_DUPLICATE] AS
(
SELECT
STT = ROW_NUMBER() OVER (PARTITION BY Email ORDER BY ID DESC), Email
FROM DiaChiEmail
)
DELETE FROM [TBL_DUPLICATE] WHERE STT > 1
您的查询当前给出了什么结果?结果表是否应该有两行111,alex,AA,2F?此行在同一公司名称中重复。您提到的结果表中确实有重复项。如果您希望每个empid、resource、dpart获得一个结果,那么您可能需要查看以下内容:按empid、resource、dpart从员工组中选择empid、resource、dpart、maxcompany。目前它不保留在同一公司名中出现的重复项。是否确实要删除包含111、alex、AA、2F的所有行?您想要的结果也包含重复项。您应该接受@Zaynulabadinthin解决方案,因为他在这之前给出了解决方案,我只是在发布和添加分区子句中的更多键之前从未见过。
WITH [TBL_DUPLICATE] AS
(
SELECT
STT = ROW_NUMBER() OVER (PARTITION BY Email ORDER BY ID DESC), Email
FROM DiaChiEmail
)
DELETE FROM [TBL_DUPLICATE] WHERE STT > 1