sql >> Databasteknik >  >> RDS >> Sqlserver

Hur tar man bort dubbletter av rader i SQL Server?

Jag gillar CTE och ROW_NUMBER eftersom de två kombinerade tillåter oss att se vilka rader som raderas (eller uppdateras), ändra därför bara DELETE FROM CTE... till 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 (Resultatet är annorlunda; jag antar att det beror på ett stavfel från din sida)

COL1    COL2    COL3    COL4    COL5    COL6    COL7
john    1        1       1       1       1       1
sally   2        2       2       2       2       2

Det här exemplet bestämmer dubbletter av en enda kolumn col1 på grund av PARTITION BY col1 . Om du vill inkludera flera kolumner lägg bara till dem i PARTITION BY :

ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)


  1. SQL Server-transaktionsloggen, del 3:Grunderna i loggning

  2. Topp n procent topp n%

  3. mysql limit inuti gruppen?

  4. Vad är MySQL-ekvivalenten för SQL Servers CHOOSE()-funktion?