powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как перенумеровать записи в группе?
10 сообщений из 10, страница 1 из 1
Как перенумеровать записи в группе?
    #32876046
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASE 12.0
В запросе нужно перенумеровать записи внутри каждогой группы с одинаковым значением полей A, B начиная нумерацию каждой группы с 1, желательно в заданном порядке (на пример, в сортировке по полям A, B, C, D ). Т.е. получить такой результат (NN):
А В ... NN
1 1 ... 1
1 1 ... 2
1 1 ... 3

1 2 ... 1

1 3 ... 1
1 3 ... 2

Подскажите как это сделать или хотябы ткните пальцем в каком направлении копать.
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32877539
av1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
казалось бы так (для ASA9):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
update tbl set nn= 0 ;

update tbl as t1
set nn=(select isnull(max(t2.nn), 0 )+ 1  
        from tbl as t2 
        where t2.a=t1.a 
          and t2.b=t1.b)
order by t1.a, t1.b, t1.id;

но у меня сортирует корректно только первую группу.
Очевидно есть какие-то ньюансы с update и/или уровнями изоляции.
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32877571
av1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати, почему только первую группу?
:)
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32879254
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ASE 12.0 так не прокатывает - в подселекте участвуют значения данных до начала транзакции - т.е max(NN) = 0 для всех записей.
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32879484
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ASA 9.0.2 спокойно и очень быстро прокатит вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
UPDATE tbl t
SET NN = x.NN
FROM ( SELECT ID,
         ROW_NUMBER() OVER (
           PARTITION BY A, B 
           ORDER BY ID
         ) AS NN
       FROM tbl
       ORDER BY A, B, ID
     ) AS x
WHERE t.ID = x.ID;
где "ID" - это поле первичного ключа, а "A" и "B" поля групп. Нумерация будет сортироваться по полю ID для каждого повторяющегося значения групп "A" и "B". При желании уже понятно, что далее копать в сторону OLAP функций.

Для более старых версий ASA, а так же версий ASE предлагаю копать в сторону использования промежуточной переменной в UPDATE, хотя тогда без курсора по группам "A" и "B" не обойтись.
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32879744
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASE не знает что такое ROW_NUMBER () OVER(). В DB2 тоже функция такая есть.
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32879768
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
golsaВ DB2 тоже функция такая есть.
Оттуда все плавно и перетекает в ASA (OLAP, CTE, WITH RECURSIVE, ...). Не удивлюсь, если окажется, что у них и в оптимизаторох много всего общего, раз уж эти 2 СУБД обе пытаются развивать стратегию с нулевым (минимальным) администрированием и интеллектуальные оптимизаторы.
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32879985
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то так. Добавить нужную группировку если надо.
Код: plaintext
1.
2.
3.
select t1.id, count(t2.id) as Nomer 
from t t1, t t2
where t1.id <=t2.id
group by t1.id
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32880108
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Crip
Спасибо за идею, так по крайней мере считает, а условиями можно задать группировку и, чуть напрягшись сортировку . Может кому еще понадобится:

update testRecno
set testRecno.nn = (select count(*)
from dbo.testRecno s
where s.a = testRecno.a
and (s.b < testRecno.b or (s.b < testRecno.b
and s.c <= testRecno.c )

группировка по A, сортировка в группе по B,C
...
Рейтинг: 0 / 0
Как перенумеровать записи в группе?
    #32880115
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, в конце не хватает закрывающей скобки ).
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как перенумеровать записи в группе?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]