Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Suppression des lignes en double (basées sur les valeurs de plusieurs colonnes) de la table SQL

Exemple SQL FIDDLE

1) Utilisez CTE pour obtenir l'enregistrement de la valeur maximale du code d'expédition basé sur ARDivisionNo, CustomerNopour chaque client

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) Pour supprimer l'enregistrement, utilisez la requête Supprimer au lieu de Sélectionner et remplacez la clause Where par 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;