如何在Sybase中使用增量编号更新一个字段的组记录?

时间:2011-02-16 19:14:57

标签: sybase

我有一个临时表,它有两列:一列是Name,另一列是RecordNumber。它们如下所示:

Name              RecordNumber  Rownum
EMEA-1111-SCHD-1     0    1
EMEA-12362-SCHD-1    0    2
EMEA-12362-SCHD-1    0    3
EMEA-12362-SCHD-1    0    4
EMEA-12362-SCHD-1    0    5
EMEA-2191-SCHD-1     0    6
EMEA-2191-SCHD-1     0    7
EMEA-2191-SCHD-1     0    8

我需要更新列“RecordNumber”,增量编号从1开始。假设EMEA-1111-SCHD-1只有一条记录,所以RecordNumber应更新为1.对于EMEA-12362-SCHD-1四条记录,因此RecordNumber应相应更新为1,2,3,4。基本上,我需要得到一个结果:

Name              RecordNumber  Rownum
EMEA-1111-SCHD-1     1    1
EMEA-12362-SCHD-1    1    2
EMEA-12362-SCHD-1    2    3
EMEA-12362-SCHD-1    3    4
EMEA-12362-SCHD-1    4    5
EMEA-2191-SCHD-1     1    6
EMEA-2191-SCHD-1     2    7
EMEA-2191-SCHD-1     3    8

没有光标可以做到吗? 谢谢你,艾德。 我添加了标识col rownum以使此记录唯一。有没有想过如何更新结果以按组记录号码?

1 个答案:

答案 0 :(得分:1)

只能在具有分析功能的Sybase IQ中执行此查询。

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc38151.1510/html/iqrefbb/BCGEEBHA.htm

这次我无法访问sybase IQ,所以我无法检查查询,但我认为正确的查询类似于

select name,
row_number() over (partition by name) as RecordNumber
from Table

AFAIK Sybase ASE没有此功能。

<强>更新

我认为您可以像这样创建自联接查询

select t1.name,
t1.Rownum - t2.MinRowNum + 1
from Table as t1,
(select name, min (Rownum) as MinRowNum from Table group by name) as t2
where t1.name = t2.name
order by t1.name, t1.Rownum