sql >> Base de Datos >  >> RDS >> Sqlserver

Eliminación de filas duplicadas (basadas en valores de varias columnas) de la tabla SQL

Ejemplo de SQL FIDDLE

1) Use CTE para obtener un registro de valor de código de envío máximo basado en ARDivisionNo, CustomerNofor cada Cliente

WITH cte AS (
  SELECT*, 
     row_number() OVER(PARTITION BY ARDivisionNo, CustomerNo ORDER BY ShipToCode desc) AS [rn]
  FROM t
)
Select * from cte WHERE [rn] = 1

2) Para eliminar el registro, use Eliminar consulta en lugar de Seleccionar y cambie la Cláusula Dónde a rn> 1. Sample SQL FIDDLE

WITH cte AS (
  SELECT*, 
     row_number() OVER(PARTITION BY ARDivisionNo, CustomerNo ORDER BY ShipToCode desc) AS [rn]
  FROM t
)
Delete from cte WHERE [rn] > 1;

select * from t;