vertica:在列值中设置行号

时间:2013-06-26 20:25:32

标签: database vertica

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

例如:

Table T has two columns: Id, name

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

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

但是,Vertica不支持变量。

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

1 个答案:

答案 0 :(得分: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;

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