1

の重複はTable 1次のように識別されます。

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

ここで、以下の 2 つのルールに基づいて重複を排除したいと考えています。

Status= Complete If none in complete ステータスのエントリを取得し、 max([created_date ]) Else フラグのエントリを取得して ? を調べます。

削除を含むステートメントが必要であるCASEが、構築方法がわからないとしますか?

4

1 に答える 1

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条件を変更するだけです。

于 2012-05-30T18:59:29.670 に答える