Создавать серии внутри группы - PullRequest
0 голосов
/ 05 августа 2020

Если у меня есть такие данные, как:

pkey, category, group_id
1,       a,      NULL
2,       a,      NULL
3,       a,      NULL
4,       b,      NULL
5,       b,      NULL
6,       b,      NULL

, как я могу заменить нули серийным номером, который сбрасывается для каждой категории?

, чтобы получить:

pkey, category, group_id
1,       a,      1
2,       a,      2
3,       a,      3
4,       b,      1
5,       b,      2
6,       b,      3

Спасибо

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вы можете использовать ROW_NUMBER:

SELECT
    pkey,
    category,
    ROW_NUMBER() OVER (PARTITION BY category ORDER BY pkey) group_id
FROM yourTable
ORDER BY
    pkey;

снимок экрана из демонстрационной ссылки ниже

Демо

1 голос
/ 05 августа 2020

Вы можете использовать row_number():

select t.*, row_number() over (partition by category order by pkey) as group_id
from t;

Вы можете включить это в update, если вы действительно хотите изменить данные:

update t
    set group_id = tt.new_group_id
    from (select t.*, row_number() over (partition by category order by pkey) as new_group_id
          from t
         ) tt
    where tt.pkey = t.pkey;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...