最初の行を残して重複行を削除する 質問する

最初の行を残して重複行を削除する 質問する

重複行が存在しない場合に、それを削除するにはどうすればよいですかunique row id?

私のテーブルは

col1  col2 col3 col4 col5 col6 col7
john  1    1    1    1    1    1 
john  1    1    1    1    1    1
sally 2    2    2    2    2    2
sally 2    2    2    2    2    2

重複を削除した後、次の内容が残るようにします。

john  1    1    1    1    1    1
sally 2    2    2    2    2    2

いくつかのクエリを試してみましたが、希望する結果が得られなかったため、行 ID に依存していると思います。例:

DELETE
FROM table
WHERE col1 IN (
    SELECT id
    FROM table
    GROUP BY id
    HAVING (COUNT(col1) > 1)
)

ベストアンサー1

私は 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

DEMO(結果は異なりますが、これはあなたの入力ミスによるものだと思います)

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)

おすすめ記事