如何比较记录并在sqlserver中分配值

时间:2013-12-19 16:11:43

标签: sql sql-server-2008-r2 qsqlquery

我的数据库中有两列“名称”和“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
-----+-----------

1 个答案:

答案 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];