У меня есть таблица со следующей структурой
Мне нужно добавить новый столбец целочисленного типа с именем «Заказ» с некоторыми данными, как описано ниже:
Как мы видим, целочисленные данные в последовательности столбцов «Порядок» должны сбрасываться, если данные «Деление» изменяются. В таблице тысячи строк с более чем 100 различными подразделениями.
Как я могу этого добиться?
@ Ларну, я не уверен, что это значит. Но после обновления не должно быть никаких изменений в данных исходного столбца (Id, Division, Details).
Итак, как только Division изменится на 'B'
(в этом сценарии на ID 3
), у вас никогда не будет другого 'A'
? Итак, что вы делаете в 'Z'
, что будет после?
Да, я мог бы получить еще одну пятерку. После «Z» может быть «A1», «B1»... (Кстати, это не точные имена столбцов, данные, которые я использую в проекте. Приведенный выше пример приведен только для облегчения понимания.)
Вы можете использовать row_number()
:
select t.*,
row_number() over(partition by division order by id) rn
from mytable t
Спасибо. Чтобы заставить его работать, используя следующий скрипт, обновите t set t.Order=t.rn from (выберите mytable .*, row_number() over (раздел по порядку деления по идентификатору) rn из mytable) t
Что произойдет, если
'B'
изменится обратно на'A'
?