Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak usunąć zduplikowane wiersze w SQL Server?

Lubię CTE i ROW_NUMBER ponieważ te dwa połączone pozwalają nam zobaczyć, które wiersze są usuwane (lub aktualizowane), dlatego po prostu zmień DELETE FROM CTE... do 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 (wynik jest inny; zakładam, że jest to spowodowane literówką z Twojej strony)

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

Ten przykład określa duplikaty przez pojedynczą kolumnę col1 ze względu na PARTITION BY col1 . Jeśli chcesz uwzględnić wiele kolumn, po prostu dodaj je do PARTITION BY :

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Wielokrotne liczenie w tym samym wierszu z dynamiczną kolumną

  2. Jak wdrożyć SQL Server Compact Edition 4.0?

  3. SQL skuteczny sposób na dołączenie do tabeli, w której istnieją wszystkie wartości

  4. Jak usunąć zduplikowane wiersze w SQL Server?

  5. Wykonywanie zadania SQL Server Agent z procedury składowanej i zwracanie wyniku zadania