Как сравнить записи и присвоить значение в 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];