2016-06-27 6 views
0

リーグでのプレーヤの重み付けをランダムに生成したいのですが、これはリーグウェイティング(リーグ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 
+0

ビューは必要ありません。 fn_PlayerWeighting関数でRANDを処理するだけで済みます。ここでは、あなたが望む範囲の間にあなたのRAND値を保持する方法に関するいくつかの素晴らしい情報があります。 http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/ – scsimon

答えて

0

あなたの関数でこれを使用してください。

SELECT @playerWeight = ROUND(((@MaxPlayerWeighting - @MinPlayerWeighting -1) * RAND() + @MinPlayerWeighting), 0) 
+0

ありがとう –

関連する問題