2016-06-27 3 views
0

Я хочу генерировать случайные весы игроков, основанные в лиге, в которой они играют. У меня есть эта работа, когда был только один союзник (который был майейн-лигой, взвешивающей за лигу), но Я хочу включить MinLeagueWeighting так, чтобы он начинался с этого числа, а не 0.Как выбрать между минимальным и максимальным диапазоном

Мне просто нужна помощь по оператору select в функции scarlar, чтобы иметь возможность случайного выбора игрока, взвешивающего между минимальным значением и максимальное значение:

Ниже приведена процедура league_insert для определения максимального и минимального веса за лигу:

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

Вам не нужен вид. Вам просто нужно обработать свой RAND в функции fn_PlayerWeighting. Вот несколько отличных сведений о том, как сохранить значение 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

Большое спасибо –

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