sql >> Database >  >> RDS >> Sqlserver

Dubbele rijen verwijderen (op basis van waarden uit meerdere kolommen) uit SQL-tabel

Voorbeeld SQL FIDDLE

1) Gebruik CTE om de maximale waarde van de scheepscode te krijgen op basis van ARDivisionNo, CustomerNofor elke klant

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) Om het record te verwijderen, gebruikt u Delete-query in plaats van Select en wijzig Where-clausule in rn> 1. Voorbeeld 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;


  1. Upgrade van SQL Server-gegevensplatform in 2015

  2. SQL2008 RDL-bestand converteren naar SQL2005

  3. LEFT JOIN alleen eerste rij

  4. Toegang krijgen tot de ingebouwde CRM-sjabloon in Microsoft Access