リーグでのプレーヤの重み付けをランダムに生成したいのですが、これはリーグウェイティング(リーグ1つにつきマイムリーグの重み付け)私はMinLeagueWeightingを含めて、0ではなくその番号から開始するようにしたい。最小と最大の範囲を選択する方法
scarlar関数のselectステートメントについて助言が必要なのは、最小値最大値:
以下はリーグごとの最大と最小の重みを決定するためのleague_insert procです:
以下はUPDATE League
SET MaxLeagueWeight =
(
CASE
WHEN LeagueID = 1 THEN 90
WHEN LeagueID = 2 THEN 80
WHEN LeagueID = 3 THEN 70
WHEN LeagueID = 4 THEN 85
WHEN LeagueID = 5 THEN 90
ELSE 0
END
),
MinLeagueWeight =
(
CASE
WHEN LeagueID = 1 THEN 50
WHEN LeagueID = 2 THEN 40
WHEN LeagueID = 3 THEN 30
WHEN LeagueID = 4 THEN 45
WHEN LeagueID = 5 THEN 50
ELSE 0
END
)
ランダムを実行するための図である。
以下CREATE VIEW Random
AS
SELECT RAND() RandValue
は最低と可能な限り最高のリーグの重み間の各プレーヤーのプレーヤーの重み付けを選択する必要があるscarlar機能です(私が思うところ、これがあります修正が必要である):
以下CREATE FUNCTION [dbo].[fn_PlayerWeighting]
(
@MaxPlayerWeighting INT,
@MinPlayerWeighting INT
)
RETURNS INT
AS
BEGIN
DECLARE @playerWeight INT
SELECT @playerWeight = ROUND(((@MaxPlayerWeighting - 0 - 1) * (SELECT RandValue FROM Random) + 0), 0)
RETURN @playerWeight;
END
は機能が更新され、選択されている:
UPDATE Player
SET PlayerWeighting = dbo.fn_PlayerWeighting (l.MaxLeagueWeight, l.MinLeagueWeight)
FROM Player p
INNER JOIN Team t
ON t.TeamID = p.TeamID
INNER JOIN League l
ON l.LeagueID = t.LeagueID
SELECT dbo.fn_PlayerWeighting (l.MaxLeagueWeight, l.MinLeagueWeight)
FROM Player p
INNER JOIN Team t
ON t.TeamID = p.TeamID
INNER JOIN League l
ON l.LeagueID = t.LeagueID
ビューは必要ありません。 fn_PlayerWeighting関数でRANDを処理するだけで済みます。ここでは、あなたが望む範囲の間にあなたのRAND値を保持する方法に関するいくつかの素晴らしい情報があります。 http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/ – scsimon