2012-05-30 12 views
1

Table 1中的重複項標識如下:處理表中的重複值的不同規則

select quote_ref, count (*) 
from table 1 
group by quote_ref 
having count(*) > 1 

現在我想根據下面的2條規則消除重複。

以具有Status= Complete 如果沒有在完整的狀態再取一個與max([created_date ]) else標誌來看看入門?

假設我需要一個帶有刪除的CASE語句,但不知道如何構造?

回答

4

對於SQL Server 2005 +,你可以做到以下幾點:

;WITH CTE AS 
(
    SELECT *, 
      ROW_NUMBER() 
      OVER(PARTITION BY quote_ref 
       ORDER BY CASE WHEN [Status]='COMPLETE' THEN 1 ELSE 2 END, 
       created_date DESC) RowNum 
    FROM table1 
) 
DELETE FROM CTE 
WHERE RowNum != 1 

在這種情況下,我假設你不想刪除該行是一個與status = 'COMPLETE'或一個最大值爲created_date。如果相反,您可以簡單地更改WHERE條件。

+0

簡直太棒了答案。謝謝。 –