0

重複の可能性:
削除スクリプト SQL Server 2008

これが私が解決しようとしている状況です。重複がロードされたテーブルがあります。これは、類似した行が 2 つ以上の異なるソースからロードされたために発生しました。それはパッケージで世話をされています。

しかし、重複している行を削除したいと思います。ここにはキー属性はありません。ソースの例はCleveland CityOhio Stateです。そして、行がどのソースからロードされたかを示す列があります(DataSource列)。

したがって、行ではDataSource = 'Cleveland'またはとして表示されDataSource = 'Ohio'ます。

オハイオからロードされたときに重複したレコードを保持したいと考えています。結合を使用する必要があるかもしれない 100k レコード。もう 1 つ、私のメイン テーブルは、rId各行に固有の他の 4 つまたは 5 つのテーブルと結合されています。そのため、私がこのテーブルに結合しているのが見えますが、私が正しくやったとは思いません。

私の仕事をチェックしてもらえますか?本当に感謝しています

 --Delete ct from--this is to delete w/c is my main intention
 SELECT * 
 FROM
  (
     (
        SELECT Rid,UID,ADDRESS,City,State,Zip,DataSource  
        FROM F_staRes where dataSource='Ohio'
     ) O inner join
     (
           SELECT Rid,UID,ADDRESS,City,State,Zip,DataSource  
           FROM F_staRes 
           where DataSource  in   ('Clev','Columbus')
     ) ct
          on O.UID=ct.UID and O.ADDRESS=ct.ADDRESS  and O.City=ct.City and   
          O.State=ct.State  and O.zip=ct.zip

            join dbo.ResOrig ro
            on ct.rId=ro.rId 

            join dbo.ResSta rs
            on ct.rId=rs.rId

            join dbo.ResDest rd 
            on ct.rId=rd.rId

           where ct.DataSource in ('Clev','Columbus')
4

1 に答える 1

0

これを試してみてください

重複を比較する列があることを確認してください。列ごとに、ここでascまたはdescを保持する必要があります。この場合、descと記述します。最初に、deleteステートメントにコメントして行を選択してみてください。問題がなければ、削除された行が表示されます。スクリプトを実行するだけです

;WITH tbl_online AS (
SELECT *,ROW_NUMBER () OVER (
PARTITION BY UID,ADDRESS,City,State,Zip ORDER BY DataSource  DESC) AS Rnum
FROM F_staRes)
--SELECT *  FROM tbl_online WHERE Rnum >1
DELETE   FROM tbl_online WHERE Rnum >1
于 2012-10-18T21:06:07.687 に答える