我的数据库中有两列“名称”和“Id”
e.g。
NAME | ID
-----+-----------
jhon | 0
-----+-----------
kim | 0
-----+-----------
alex | 0
-----+-----------
jhon | 0
-----+-----------
alex | 0
-----+-----------
max | 0
-----+-----------
目前我已为所有人分配了“id”0。我想编写一个存储过程或查询,将相同的id(任何随机值)分配给多次出现的记录。其他记录的ID仍为0。例如约翰和亚历克斯正在发生两次。所以他们的id应该更新,否则其他记录的ID保持不变。 这是我的样本和期望的输出
NAME | ID
-----+-----------
jhon | 25
-----+-----------
kim | 0
-----+-----------
alex | 12
-----+-----------
jhon | 25
-----+-----------
alex | 12
-----+-----------
max | 0
-----+-----------
答案 0 :(得分:0)
我使用group by子句来获取所有ID,如下所示:
select
Name,
yourRandomId()
from YourTable
group by Name
having count(1) > 1
然后,您可以在一个简单的select
命令中使用此update
,该命令设置此结果集中每一行的ID。
更完整的示例可能如下所示:
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];