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

использование ГДЕ условие для фильтрации @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 годов в таблице команды и не GroupID не будет иметь появление более 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

Примечание: Распределение довольно хорошо, однако есть случайные пики.

Смежные вопросы