Sql 如何列出每行的随机数
我用一个选择表创建了一个insert-into,我想让它做的是给每个玩家一个0-99之间的随机“玩家权重”。然而,我的问题是,它似乎不是为每一行随机分配一名球员的权重,而是为每一名球员所在的球队随机分配权重。例如:Sql 如何列出每行的随机数,sql,sql-server,Sql,Sql Server,我用一个选择表创建了一个insert-into,我想让它做的是给每个玩家一个0-99之间的随机“玩家权重”。然而,我的问题是,它似乎不是为每一行随机分配一名球员的权重,而是为每一名球员所在的球队随机分配权重。例如: PlayerID FirstName Surname PlayerWeighting TeamID 1 Chelsea Player1 87 1 2 Chelsea
PlayerID FirstName Surname PlayerWeighting TeamID
1 Chelsea Player1 87 1
2 Chelsea Player2 87 1
3 Chelsea Player3 87 1
4 Liverpool Player1 73 2
5 Liverpool Player2 73 2
相反,我希望它能做这样的事情:
PlayerID FirstName Surname PlayerWeighting TeamID
1 Chelsea Player1 87 1
2 Chelsea Player2 73 1
3 Chelsea Player3 62 1
4 Liverpool Player1 90 2
5 Liverpool Player2 51 2
我需要在查询中更改什么才能使其工作(NumberID是“Player”每个字符串末尾的数字)
CREATE PROCEDURE [dbo].[Player_CreateWholeTeam]
@TeamID INT
AS
SET NOCOUNT ON
BEGIN
INSERT INTO dbo.Player (FirstName, Surname, PlayerWeighting, TeamID)
SELECT TeamName AS FirstName, 'Player' + cast(NumberID AS VARCHAR (10)) AS Surname, CONVERT(INT, (RAND() * 99)) AS PlayerWeighting, @TeamID
FROM dbo.Team t
CROSS JOIN dbo.Number n
WHERE TeamID = @TeamID
AND n.NumberID <= 20
END
创建过程[dbo]。[Player\u createwholetam]
@TeamID INT
作为
不计较
开始
插入dbo.Player(名字、姓氏、玩家权重、团队ID)
选择TeamName作为名字,“玩家”+cast(numberrid作为VARCHAR(10))作为姓氏,转换(INT,(RAND()*99))作为玩家权重,@TeamID
来自dbo.t队
交叉连接dbo.Number n
其中TeamID=@TeamID
n.NumberID这将给出0到99之间的随机整数
abs(convert (bigint, convert(varbinary(20), newid()))) % 100
或
它们的关键是使用NEWID(),它将为每一行生成一个唯一的值。RAND()不非常感谢Squirrel
abs(checksum(newid())) % 100