重複行が存在しない場合に、それを削除するにはどうすればよいですか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)