2016-11-11 26 views
1

这是我的存储过程中的一个查询,其中我将Main表中的记录插入到表中,之后我想删除在我的主表中重复多行。删除表中具有相同值但在SQL Server中保留一行的重复行

这是我的代码

IF EXISTS (SELECT * 
      FROM [JOB] 
      WHERE 
       AND ExternalSourceId = @ExternalSourceId 
       AND Id <> @Id 
       AND IsActive = 1) 
BEGIN 
    INSERT INTO DupJob 
     SELECT * 
     FROM [JOB] j 
     WHERE 
      AND ExternalSourceId = @ExternalSourceId 
      AND Id <> @Id 
      AND IsActive = 1 
      AND NOT EXISTS (SELECT * FROM DupJob dj WHERE J.Id = dj.Id)  
    -- the delete should delete all duplicates except one ? 
END  

寻求帮助进行,由于

+0

您遇到什么问题? –

+0

我只是想要一种方式来执行删除语句 – user1221765

回答

1

row_number()和CTE是做到这一点的简便方法。我不知道到底是什么你想要的逻辑,但它是这样的:

with todelete as (
     select j.*, 
      row_number() over (partition by OrganizationName, JobTitle, PostalCode, ExternalSourceId) 
           order by id) as seqnum 
     from job j 
    ) 
delete from todelete 
    where seqnum > 1; 

这将让每列一行在partition by,一个与id最小值。

+0

我想同样要使用row_number()或rank()。我可以使用以上与我的查询结合吗?请建议 – user1221765

+0

等级和行号在他们对待关系方面略有不同。没有关系,它们是等价的。 –

相关问题