Как обновить групповые записи для одного поля с инкрементным номером в Sybase? - PullRequest
1 голос
/ 16 февраля 2011

У меня есть временная таблица, которая имеет два столбца: один - Имя, а другой - 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 Ответ

1 голос
/ 18 февраля 2011

Вы можете выполнить этот запрос только в 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
...