0

我的数据库中有两列“名称”和“ID”

例如

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

目前我已经为所有人分配了“id”0。我想编写一个存储过程或查询,将相同的 id(任何随机值)分配给多次发生的记录。其他记录的 ID 保持为 0 。例如 john 和 Alex 发生了两次。所以他们的 id 应该更新,否则其他记录的 ID 保持不变。这是我的样本和想要的输出

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

1 回答 1

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];
于 2013-12-19T16:17:53.497 回答