2015-01-07 65 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

注:分佈很不錯但也有偶爾的峯值。

相關問題