3

いくつかの重複行を含むテーブルがあります。次のように重複行のみを変更したい。

前:

id     col1
------------
1      vvvv
2      vvvv
3      vvvv

後:

id     col1
------------
1      vvvv
2      vvvv-2
3      vvvv-3

Col1 には、ハイフンとid列の値が追加されます。

4

4 に答える 4

7

この SQL は重複のみを更新しますが、最小の id を持つものは更新しません:

update tbl
  set col1 = col1 + '-' + convert(varchar, id)
  where exists(select * from tbl t where t.col1 = tbl.col1 and t.id < tbl.id)
于 2008-11-26T10:46:53.430 に答える
2

INOracle 構文で確認してください。クエリはテストされていません

update table1 set
col1 = col1 || id
where
id not in (
select min(id) from table1
groupby col1
)
于 2008-11-26T06:44:03.763 に答える
0

sproc とカーソルを使用してそれを行うことができる場合があります。合理的な選択クエリでは不可能だと思います。

于 2008-11-26T06:04:48.990 に答える
0

これは 2 段階のプロセスで実現できますが、SQL ウィザードはおそらくこれを変更して 1 段階で解決策を提供できます。

まず、すべての重複値を取得する必要があります。これを行う SQL クエリを次に示します。

SELECT COUNT(*) AS NumberOfDuplicates、col1
FROM テーブル 1
GROUP BY col1
HAVING (COUNT(*) > 1)

これにより、重複数と重複値をリストする結果セットが得られます。

ステップ 2 では、この結果セットをループし、col1 値をフェッチし、その値を含むすべてのレコードを返し、(おそらくループ カウンター変数を使用して) 例に従って値を変更します。

注: 目標を達成するために重複の数を返す必要はありませんが、クエリをテストし、それが機能することを確認するのに役立ちます。

于 2008-11-26T06:10:05.343 に答える