5

テーブルに約 2000 個の正確な重複があり、そのうちの 1 つを削除したい方法があります。サンプル データは次のようになります。

Year    ID   Name   Type
2015    200  John   S
2015    200  John   S 
2014    100  Peter  T
2014    100  Peter  T

そして、私は次のように出力したい:

Year    ID   Name   Type
2015    200  John   S
2014    100  Peter  T

Row_number を使用してみましたが、削除方法がわかりません

4

1 に答える 1

15

1行を削除するのではなく、1行を保持したいと仮定します。また、この特定の値のセットのみをターゲットにするのか、すべての重複セットを処理するのかが明確ではありませんでした。

;WITH x(y,i,n,t,r) AS 
(
  SELECT [Year], ID, Name, [Type],
    ROW_NUMBER() OVER (PARTITION BY [Year], ID, Name, [Type] ORDER BY [Year])
  FROM dbo.table_name
  /*
    WHERE [Year] = 2015
    AND ID = 200
    AND Name = 'John'
    AND [Type] = 'S'
  */
)
DELETE x WHERE r > 1;

1 つの行を削除して 1999 の重複を保持する場合は、最後の行を次のように変更します。

DELETE x WHERE r = 1;

このセットのみを処理する場合は、 と を削除し/*ます*/

また、 and (多くの場合、角かっこが必要です) and year(どういう意味ですか?)のような不適切な列名も避けることをお勧めします。typeID

于 2013-01-16T20:55:31.010 に答える