いくつかの重複行を含むテーブルがあります。次のように重複行のみを変更したい。
前:
id col1
------------
1 vvvv
2 vvvv
3 vvvv
後:
id col1
------------
1 vvvv
2 vvvv-2
3 vvvv-3
Col1 には、ハイフンとid
列の値が追加されます。
いくつかの重複行を含むテーブルがあります。次のように重複行のみを変更したい。
前:
id col1
------------
1 vvvv
2 vvvv
3 vvvv
後:
id col1
------------
1 vvvv
2 vvvv-2
3 vvvv-3
Col1 には、ハイフンとid
列の値が追加されます。
この 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)
IN
Oracle 構文で確認してください。クエリはテストされていません
update table1 set
col1 = col1 || id
where
id not in (
select min(id) from table1
groupby col1
)
sproc とカーソルを使用してそれを行うことができる場合があります。合理的な選択クエリでは不可能だと思います。
これは 2 段階のプロセスで実現できますが、SQL ウィザードはおそらくこれを変更して 1 段階で解決策を提供できます。
まず、すべての重複値を取得する必要があります。これを行う SQL クエリを次に示します。
SELECT COUNT(*) AS NumberOfDuplicates、col1 FROM テーブル 1 GROUP BY col1 HAVING (COUNT(*) > 1)
これにより、重複数と重複値をリストする結果セットが得られます。
ステップ 2 では、この結果セットをループし、col1 値をフェッチし、その値を含むすべてのレコードを返し、(おそらくループ カウンター変数を使用して) 例に従って値を変更します。
注: 目標を達成するために重複の数を返す必要はありませんが、クエリをテストし、それが機能することを確認するのに役立ちます。