Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como excluir linhas duplicadas no SQL Server?


Eu gosto de CTEs e ROW_NUMBER como os dois combinados nos permitem ver quais linhas são excluídas (ou atualizadas), portanto, basta alterar o DELETE FROM CTE... para 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 (o resultado é diferente; suponho que seja devido a um erro de digitação de sua parte)
COL1    COL2    COL3    COL4    COL5    COL6    COL7
john    1        1       1       1       1       1
sally   2        2       2       2       2       2

Este exemplo determina duplicatas por uma única coluna col1 por causa da PARTITION BY col1 . Se você quiser incluir várias colunas, basta adicioná-las ao PARTITION BY :
ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)