問題: Vertica で列の値に行番号を設定する。
例えば:
Table T has two columns: Id, name
スクリプトを使用して、名前の値に行番号を追加したいと考えています。mySQl で、次のスクリプトを実行して更新します。
set @i=0;
update T set name = (CONCAT(name, (@i:=@i+1)));
ただし、Vertica は変数をサポートしていません。
目標に到達する方法を教えてください。
Vertica はウィンドウ関数をサポートしているため、次のようなものを使用してこのデータを取得できます。
select name,
row_number() over (order by name) as rn
from T;
ただし、これを UPDATE ステートメントに移動する方法がわかりません。利用可能な vertica インストールがありません。
update T
set name = name || tx.rn
from (
select id,
row_number() over (order by name) as rn
from T
) as tx
where tx.id = t.id;
それが許可されていない「自己結合」に該当するかどうかはわかりません。しかし、おそらくそれはあなたを正しい方向に向けています。