Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Entfernen doppelter Zeilen (basierend auf Werten aus mehreren Spalten) aus der SQL-Tabelle

Beispiel-SQL-FIDDLE

1) Verwenden Sie CTE, um den Datensatz für den maximalen Versandcodewert basierend auf ARDivisionNo, CustomerNofor each Customers

zu erhalten
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) Um den Datensatz zu löschen, verwenden Sie Delete query anstelle von Select und ändern Sie die Where-Klausel in rn> 1. Beispiel-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;