Недавно я работал над проектом, в котором нужно добавить столбец для сортировки существующих записей. Чтобы прояснить тему, приведу небольшой пример. Предположим, у нас есть таблица для хранения названий центров инъекций вакцины Corona и другая таблица для регистрации людей, которые приходят в каждый из этих центров. После сбора данных мы приходим к выводу, что для управления порядком ходов мы должны добавить столбец «Порядок» в таблицу Person. Как я могу сделать это, написав запрос, не теряя при этом собранные данные?

Вот таблица центров:

enter image description here

А это таблица лиц:

enter image description here

И я ожидаю что-то вроде этого:

enter image description here

PS: Я использую SQL для создания таблиц и хранения данных.

-3
Ali Ghanaatpisheh 26 Ноя 2021 в 17:08

2 ответа

Лучший ответ

Я бы создал для этого представление со столбцом «Порядок», создаваемым «на лету».

Это заказ или последовательность ? Я бы избегал слова «порядок», поскольку это зарезервированное слово.

Create view PersonSequence as

Select Id, Name, CentreId,
  row_number() over (partition by CentreId order by Id) as Sequence
from Person

Чтобы обновить существующую таблицу, вы можете сделать

alter table Person add Seq int;

with u as (
  Select *,
  row_number() over (partition by CentreId order by Id) as rn
  from Person
)
update u
set seq=rn;

См. Пример скрипта

1
Stu 26 Ноя 2021 в 17:38
Спасибо, это сработало, но я не хочу создавать для этого представление, по какой-то причине мне нужно изменить основную таблицу, вы тоже можете помочь в этом?
 – 
Ali Ghanaatpisheh
26 Ноя 2021 в 17:23
И под "порядком" я подразумеваю "последовательность", спасибо за подсказку.
 – 
Ali Ghanaatpisheh
26 Ноя 2021 в 17:32
1
Хорошо, если вам нужно, вы могли бы добавить столбец и просто использовать запрос выше, чтобы обновить его?
 – 
Stu
26 Ноя 2021 в 17:32
select Id,
       Name,
       CenterID,ROW_NUMBER() over (partition by CenterId order by Id) as Order
from person
1
Nikhil 26 Ноя 2021 в 17:18