Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да изтрия дублиращи се редове в SQL Server?

Харесвам CTE и ROW_NUMBER тъй като двете комбинирани ни позволяват да видим кои редове са изтрити (или актуализирани), следователно просто променете 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)


  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 сървърът разделя стойностите, разделени със запетая, в колони

  2. Какви разрешения са необходими за масово вмъкване в SQL Server от мрежов дял с Windows удостоверяване?

  3. SQL Server създава таблица с клъстерен индекс без първичен ключ

  4. Разрешаване на специални знаци SQL Server 2008

  5. ИЛИ Късо съединение на оператора в SQL Server