2016-11-11 77 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

等級和行號在他們對待關係方面略有不同。沒有關係,它們是等價的。 –

相關問題