Давайте возьмем минимальный идентификатор и номер строки, разделенные на 10:
SELECT
MIN(id) OVER(PARTITION BY name, dob) + ((ROW_NUMBER() OVER(PARTITION BY name, dob ORDER BY id)-1)/10 as id,
name,
dob,
department
FROM
emp
Я выбрал минимальный идентификатор сотрудника в качестве базового идентификатора. Если у вас другая стратегия, например, вы хотите, чтобы идентификатор ИТ-отдела формировал базовое значение, а не МИН (идентификатор), рассмотрите что-то вроде FIRST_VALUE(id) OVER(PARTITION BY ... ORDER BY case when department = 'it' then 0 else 1 end)
Я согласен с Тимом, хотя; Похоже, что ваш вопрос в значительной степени неясен, плохо определен или не до конца продуман. Что если emp находится в 10 отделах и возникает конфликт идентификаторов? Как правило, нам не важно, что такое идентификационный номер, поэтому мы не меняем его и не пытаемся заполнить пробелы и т. Д.