2017-03-28 14 views
0

でカラムを記入し、AおよびB: Aは、いくつかの主キーIDを持っている:私は2つの列を持って繰り返しデータ

 A   B 
_ _ _ _ _ _ _ _ _ _ 
DCS000111  Null 
DCS000112  Null 
DCS000113  Null 
DCS000115  Null 
DCS000119  Null 

私は、テーブルを反復処理し、埋めることができますスクリプトを、持っていると思いますこのよう

[1, 2, 3] 

null値:ADVAで

A   B 
_ _ _ _ _ _ _ _ _ _ 
DCS000111  1 
DCS000112  2 
DCS000113  3 
DCS000115  1 
DCS000119  2 

感謝nce。

私は、カラムBの値を単一の値に置き換えるスクリプトを知っていますが、このメソッドではわかりません。

答えて

3

あなたは使用してselectに値を割り当てることができます。

select a, mod(row_number() over (order by a) - 1, 3) + 1 as b 
from t; 

これは、Oracleでの更新に入れるための痛みです。あなたは1,2,3の順番を気にしない場合は

merge into t using 
     (select a, mod(row_number() over (order by a) - 1, 3) + 1 as b 
     from t 
    ) tt 
     on t.a = tt.a 
    when matched then update set t.b = tt.b; 
0

それは単にの問題だ:あなたはmergeを使用することができます(と、なぜあなたでしょう、あなたのテーブルのレコードに変更のいずれかの度合いを与えられました?):

update your_table 
set b = mod(rownum,3)+1 
/
+0

返信ありがとうございますが、残念ながら、私は考慮する必要があります。 – raja777m

0

Iは、元のテーブルのコピーを取り、新たなテーブルを作成し、充填/再反復1, 2, 3(値1、値2、VALUE3)情報でカラムを要します。次のクエリを使用して両方のテーブルをMODを使用してマージしました。

INSERT INTO SELECT ColA、DECODE(MOD(rownum、3)、0、 'Value1'、1、 'Value2'、2、 'Value3')AS ColB FROM;