【问题标题】:How to update group records for one field with increment number in Sybase?如何在 Sybase 中更新具有增量编号的一个字段的组记录?
【发布时间】:2026-01-27 06:05:02
【问题描述】:

我有一个临时表,它有两列:一列是名称,另一列是 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、#2等?还有其他字段可以排序吗?
  • 嗨,克里斯,这是一个临时表结果。我可以将身份 ID 列添加到此临时表中。会有帮助吗?

标签: sybase


【解决方案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

【讨论】: