sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan sletter du dublerede rækker i SQL Server?

Jeg kan godt lide CTE'er og ROW_NUMBER da de to kombinerede tillader os at se, hvilke rækker der slettes (eller opdateres), skal du derfor bare ændre DELETE FROM CTE... til 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 er anderledes; jeg går ud fra, at det skyldes en tastefejl fra din side)

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

Dette eksempel bestemmer dubletter af en enkelt kolonne col1 på grund af PARTITION BY col1 . Hvis du vil inkludere flere kolonner, skal du blot tilføje dem til PARTITION BY :

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


  1. Sådan ændres serverniveausortering af kørende SQL Server-instans

  2. tabelopdatering efter bestemt tid i postgreSql

  3. Tidsrum - Tjek for ugedag og tidspunkt på dagen i mysql

  4. MySQL - Forbedre UPDATE-forespørgselsydeevne til komplekse beregninger