CTEとROW_NUMBER
が好きです 2つを組み合わせると、どの行が削除(または更新)されたかを確認できるため、DELETE FROM CTE...
を変更するだけです。 SELECT * FROM CTE
へ :
WITH CTE AS(
SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1)
FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1
デモ (結果は異なります。タイプミスが原因だと思います)
COL1 COL2 COL3 COL4 COL5 COL6 COL7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
この例では、単一の列col1
によって重複を判別します。 PARTITION BY col1
のため 。複数の列を含める場合は、それらをPARTITION BY
に追加するだけです。 :
ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)