row_number()を使用して、重複に番号を割り当てrn
、1 より大きい場所 (単一の出現または最初の重複) を削除することができます。
Sql Fiddle は ATM を使用できないため、簡単なテストを行います。
declare @t table (FIELD1 varchar(10), FIELD2 varchar(10), FIELD3 varchar(10), FIELD4 varchar(10), FIELD5 varchar(10))
insert into @t values ('5', '3', '2', 'A', 'J')
insert into @t values ('3', '5', '2', 'A', 'J')
insert into @t values ('5', '3', '2', 'A', 'J')
insert into @t values ('5', '3', '2', 'A', 'J')
insert into @t values ('8', 'B', '8', 'A', 'K')
; with g as (
select *,
row_number() over (partition by field1, field2, field3, field4, field5
order by (select null)) rn
from @t
)
delete g
where rn > 1
select *
from @t
欠点は、すべての列を指定する必要があることです。これを回避したい場合、テーブルに外部キーがなく、どのテーブルからも参照されていない場合は、一時テーブルにデータを挿入しDISTINCT
、元のデータを一時テーブルTRUNCATE
から再挿入します。