2015-01-07 37 views
2

当我使用此查询时,它将每行都分配给相同的值。 有没有办法让这不会发生?多行不同的rand()值SQL Server

UPDATE Team 
SET GroupID = CAST(RAND() * 4 AS INT) 

澄清: 这是使用Netbeans来组号分配给团队。

+----+----------+-------------+------------------+---------+ 
| ID | School | TeamCaptain |  Email  | GroupID | 
+----+----------+-------------+------------------+---------+ 
| 1 | School 1 | John  | [email protected] | NULL | 
| 2 | School 2 | James  | [email protected] | NULL | 
+----+----------+-------------+------------------+---------+ 

SandySands方法的工作原理。但是,有没有办法让相同的数字不能出现超过4次?

+1

使用WHERE条件过滤@Christopher –

+0

我认为你可以让你的SQL领域刚刚自动递增,一切都将工作 – VostanAzatyan

+1

看一看这个http://stackoverflow.com/questions/1214748/rand-not -different-for-every-row-in -t-sql-update –

回答

0

试试这个,它在为我工作。

UPDATE Team 
SET GroupID = CAST(RAND(CHECKSUM(NEWID()))*10000000 AS INT) 
WHERE GroupID IN (SELECT GroupID FROM Team 
GROUP BY GroupID 
HAVING COUNT(GroupID)<4) 

这段代码确保随机值被分配给所有的GroupId在团队表,没有群ID必须做它超过4

+0

..您应该编写逻辑,以便生成四个值而不是1000000个值。 –

+0

@SandySands是的,谢谢。任何方式使相同的数字不能出现超过4次? – Christopher

+0

我做了编辑@Christopher – SanyTiger

0

一种方式的发生是:

SELECT *, ABS(CAST(NEWID() AS binary(6)) %4) + 1 randomNumber 
FROM TEAM 

使用在更新中:

UPDATE Team 
SET GroupID = ABS(CAST(NEWID() AS binary(6)) %4) + 1 randomNumber 

解决方案取自:

SQL SERVER – Random Number Generator Script – SQL Query

注:分布很不错但也有偶尔的峰值。

相关问题