0

すべての列ではなく、いくつかの同一の列を共有する重複行をデータベースから削除したいと考えています。これまでの私のコード:

SELECT sfb_id, prs_id_201304, prs_id_201204, vorname, nachname, sex, gebdat, strasse, hausnummer, ort, plz, beg_dat, end_dat, quelle
INTO #duplicates
FROM [Recordlinkage].[dbo].[2012]
GROUP BY vorname, nachname, hausnummer, ort, plz
HAVING COUNT(*) > 1

-- delete all rows that are duplicated
DELETE FROM [Recordlinkage].[dbo].[2012]
FROM [Recordlinkage].[dbo].[2012] o INNER JOIN #duplicates d
ON d.vorname= o.vorname and d.nachname=o.nachname and d.hausnummer=o.hausnummer and d.ort=o.ort and d.plz=o.plz

INSERT INTO [Recordlinkage].[dbo].[2012] (vorname, nachname, hausnummer, ort, plz)
SELECT sfb_id, prs_id_201304, prs_id_201204, vorname, nachname, sex, gebdat, strasse, hausnummer, ort, plz, beg_dat, end_dat, quelle
FROM #duplicates

vorname、nachname、hausnummer、ort und plz が同一の重複のみを削除したい。この変数のサブセットのみを選択するようにテストします。それは機能しましたが、以前に選択されていなかった他のすべての列の情報がありません。

4

2 に答える 2

1

このようなもの:これを試すことができます

WITH CTE AS
(
SELECT *,RN=ROW_NUMBER() OVER (PARTITION BY columnname ORDER BY columnname DESC) FROM tablename 
)
delete from CTE where RN>1
go
于 2013-11-07T09:39:49.010 に答える