sql >> Databáze >  >> RDS >> Sqlserver

Jak odstranit duplicitní řádky v SQL Server?

Líbí se mi CTE a ROW_NUMBER protože obě kombinace nám umožňují vidět, které řádky jsou odstraněny (nebo aktualizovány), proto stačí změnit DELETE FROM CTE... na 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 (výsledek je jiný; předpokládám, že je to kvůli překlepu na vaší straně)

COL1    COL2    COL3    COL4    COL5    COL6    COL7
john    1        1       1       1       1       1
sally   2        2       2       2       2       2

Tento příklad určuje duplikáty pomocí jednoho sloupce col1 kvůli PARTITION BY col1 . Pokud chcete zahrnout více sloupců, jednoduše je přidejte do PARTITION BY :

ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)


  1. Jak zobrazit obrázek (typ bolb) na stránce jsp z mySql DB ve Struts 2 pomocí Hibernate

  2. Jak vyrobit fantomové čtení?

  3. SQL Query funguje na pracovní ploše, ale v jazyce Java poskytuje chybu syntaxe

  4. SQL Server Geography datový typ nejbližšího bodu na řádku