Как сравнить записи и присвоить значение в sqlserver

У меня есть две колонки в моей базе данных "Имя" и "Идентификатор"

например

NAME | ID       
-----+-----------
jhon | 0
-----+-----------
kim  | 0
-----+-----------
alex | 0
-----+-----------
jhon | 0
-----+-----------
alex | 0
-----+-----------
max  | 0
-----+-----------

В настоящее время я назначил "id" 0 всем. Я хочу написать хранимую процедуру или запрос, который присваивает один и тот же идентификатор (любое случайное значение) для записей, которые происходят более одного раза. ID другой записи остаются 0 . например, Джон и Алекс встречаются дважды. поэтому их идентификатор должен быть обновлен, иначе идентификатор другой записи останется прежним. вот мой образец и желаемый выход

NAME | ID       
-----+-----------
jhon | 25
-----+-----------
kim  | 0
-----+-----------
alex | 12
-----+-----------
jhon | 25
-----+-----------
alex | 12
-----+-----------
max  | 0
-----+-----------

1 ответ

Я бы использовал предложение group by, чтобы получить все идентификаторы, вот так:

select
  Name,
  yourRandomId()
from YourTable
group by Name
having count(1) > 1

Вы можете использовать это select в простом update команда, которая устанавливает идентификатор для каждой строки в этом наборе результатов.

Более полный пример может выглядеть примерно так:

with ids as
(
    select
      Name,
      yourRandomId() as [NewId]
    from YourTable
    group by Name
    having count(1) > 1
)
update T
set [Id] = ids.[NewId]
from YourTable T
inner join ids on T.[Name] = ids.[Name];
Другие вопросы по тегам