4

私のテーブルの列は次のとおりです。

Id
EmployeeId
IncidentRecordedById
DateOfIncident
Comments
TypeId
Description
IsAttenIncident

EmployeeId, DateOfIncident, TypeIdとが同じである重複行を削除Descriptionしたいと思います-明確にするために-それらの1つを保持したいです。OVERで句を使用する必要があると思いますPARTITIONが、よくわかりません。

ありがとう

4

3 に答える 3

18

重複グループの 1 行を保持したい場合は、 を使用できますROW_NUMBER。この例では、最低の行を保持しIdます:

WITH CTE AS 
(
    SELECT rn = ROW_NUMBER() 
                OVER( 
                  PARTITION BY employeeid, dateofincident, typeid, description 
                  ORDER BY Id ASC), * 
    FROM dbo.TableName
) 
DELETE FROM cte 
WHERE  rn > 1 
于 2013-04-24T15:22:14.577 に答える
0

次のクエリを使用できます。これは、最新の行を保持し、他の重複を削除することを前提としています。

DELETE [YourTable]
FROM [YourTable]  
LEFT OUTER JOIN (  
   SELECT MAX(ID) as RowId 
   FROM [YourTable]   
   GROUP BY EmployeeId, DateOfIncident, TypeId, Description  
) as KeepRows ON  
   [YourTable].ID = KeepRows.RowId  
WHERE  
   KeepRows.RowId IS NULL
于 2013-08-02T10:08:29.790 に答える