Sql 需要从表中查找并删除重复记录

Sql 需要从表中查找并删除重复记录,sql,sql-server,Sql,Sql Server,我需要从我的employee表中删除重复项,但如果重复项出现在同一个公司名称中,则应将其保留 我有以下数据 empid resource Dpart company 111 alex AA 1C 112 chris QA 2F 111 alex AA

我需要从我的employee表中删除重复项,但如果重复项出现在同一个公司名称中,则应将其保留

我有以下数据

    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