0

注: 可能であれば、SQL Server Manager で実行できる純粋な SQL クエリ ソリューションを探しています。

スクリプトにエラーがありました。これは、1 回入力することを意図していたデータが複数回入力されたことを意味し、1 つのエントリ PERcompany_idフィールドを除くすべてを削除するexport、1 つのエントリごとに列を更新する方法が必要ですcompany_id

short_descには複数のオカレンスがあり、 long_desc複数のオカレンスがあります

私のデータは次のように構成されています。

   id  |  company_id  |  short_desc  |  long_desc  | export
    1       1234            word           text       0
    2       1234            word           text       0
    3       1234            word           text       0
    4       1234            word           text       0
    5       1234            word           text       0
    6       1234            word           text       0
    7       5678            another        foo        0
    8       5678            another        foo        0
    9       5678            another        foo        0
    10      5678            another        foo        0
    11      5678            another        foo        0
    12      5678            another        foo        0

それぞれのエントリが 1 つしかない限り、どのエントリが更新 / 削除されてもかまいません。上の例では、2 つのエントリしか残らない / としてマークされexport=-1ます。

サブセレクトとグループ化を使用してさまざまなことを試みましたが、常にグループ化する必要があるidため、重複が発生することはありません。長い朝だったかどうかはわかりませんが、これを行うための純粋な SQL の方法が思い浮かばないようです。そのためのスクリプトを作成することは避けたいと思います。

フラグが設定されている場合は、exportフラグが 0 の場所だけを削除します。

SQL Server 2008 を使用しています。

4

1 に答える 1

1
update table set export = -1
where table.id in 
(
  select min(id) from table group by company_id,short_desc,long_desc
  having count(1) > 1
)
于 2012-04-05T09:01:23.237 に答える