2016-05-10 6 views
0

Postgresのテーブル内のすべての行を更新し、各行を別の値に設定したい。この値は開始値で増分値になります。例えば各行をインクリメンタルな値で更新するPostgres

、私は次のようなデータを持つテーブルtab_aがあるとします。

|attr_a|attr_b| 
|1  |null | 
|2  |null | 
|3  |null | 
|4  |null | 

私が欲しいかもしれない出力は次のようになります。ここでは

|attr_a|attr_b| 
|1  |5  | 
|2  |6  | 
|3  |7  | 
|4  |8  | 

は私のスクリプトです:

UPDATE tab_a 
SET attr_b = gen.id 
FROM generate_series(5,8) AS gen(id); 

しかし、期待どおりに動作していません...

+0

更新tab_aセットattr_b = attr_a + 4。 – MightyRearranger

+0

@MightyRearranger attr_aは私のID自動インクリメンタルであり、常に1から始まるとは限りません。例を挙げました。 –

+0

私は、テーブルに他のフィールドがあり、新しい値を特定の順序にしたいと思っています。そうであれば、Rank()Over(x、y、z順)をRANKINGとして使用して整数値を取得し、それを使って必要な系列を生成することができます。 – MightyRearranger

答えて

0

あなたが行うことができ

UPDATE tab_a upd 
SET attr_b = row_number + 4 -- or something like row_number + (select max(attr_a) from tab_a) 
FROM (
    SELECT attr_a, row_number() over() 
    FROM tab_a 
    ORDER BY 1 
) a 
WHERE upd.attr_a = a.attr_a; 
関連する問題