1

问题:在 Vertica 的列值中设置行号。

例如:

Table T has two columns: Id, name

我想使用脚本在名称的值中添加行号。在 mySQl 中,我运行以下脚本进行更新:

set @i=0;
update T set name = (CONCAT(name, (@i:=@i+1)));

但是,Vertica 不支持变量。

您能否提供一种达到目标的方法?

4

1 回答 1

2

由于 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;

我不知道这是否属于不允许的“自加入”。但也许这会为你指明正确的方向。

于 2013-06-26T21:17:49.560 回答