2013-12-19 23 views
0

我的数据库中有两列“名称”和“Id”如何比较记录并在sqlserver中分配值

例如,

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

我会使用一个group by子句来获得所有的ID,像这样:

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

然后,您可以在一个简单的update使用select命令,它为此结果集中的每一行设置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]; 
+0

溶液不准确,但它让我非常接近的目标..请帮助我,让我再解释当前的问题 –

+0

我有回答我自己的问题,请检查一下 –

相关问题