Сбросить числовую последовательность столбца после удаления строки - PullRequest
0 голосов
/ 30 сентября 2019

Я видел много решений для повторного заполнения столбца идентификаторов после удаления строки. Однако мне нужно сбросить числовую последовательность из столбца, который не является идентичным столбцом.

+------+---------+----------+
| group| user    | sequence |
+------+---------+----------+
|   1  | barney  |     1    |
|   1  | andy    |     2    |
|   1  | odis    |     3    |
|   1  | opie    |     4    |
|   2  | beaver  |     1    |
|   2  | wally   |     2    |
|   2  | eddie   |     3    |
+------+---------+----------+

Итак, если я удалю odis, новая последовательность должна выглядеть следующим образом:

+------+---------+----------+
| group| user    | sequence |
+------+---------+----------+
|   1  | barney  |     1    |
|   1  | andy    |     2    |
|   1  | opie    |     3    |
|   2  | beaver  |     1    |
|   2  | wally   |     2    |
|   2  | eddie   |     3    |
+------+---------+----------+

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Я надеюсь, что это решит вашу проблему:

with tbl2(grp, usr, seq) as
(
select grp, usr,
    row_number() over(partition by grp order by seq) as seq
from tbl1
)
update tbl1
set seq = t2.seq
from tbl1 t1
join tbl2 t2 on t2.grp = t1.grp and t2.usr = t1.usr
where t2.seq != t1.seq
0 голосов
/ 01 октября 2019

Вместо сброса (потенциально значимой части) значений столбца при удалении вы можете создать представление представления поверх таблицы, которая вычисляет последовательность на лету.

Либо с помощью сортировки поимя пользователя (однако это означает, что последовательность может измениться при обновлении usernmae):

CREATE VIEW myview AS
SELECT
    group,
    user,
    ROW_NUMBER() OVER(PARTITION BY group ORDER BY user) sequence
FROM mytable t

Или еще лучше, с сортировкой на основе исходной последовательности:

CREATE VIEW myview AS
SELECT
    group,
    user,
    ROW_NUMBER() OVER(PARTITION BY group ORDER BY sequence) sequence
FROM mytable t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...