首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用数学方法生成固定值的百分比

如何用数学方法生成固定值的百分比
EN

Stack Overflow用户
提问于 2016-06-08 11:29:44
回答 1查看 79关注 0票数 1

我有一个发行程序,它只知道如何编写以下要求:

我有一份球队名单,每支球队有20名球员。每支球队的名字都由“FirstName”和“Player…”组成。作为“姓氏”,在字符串“Player”之后出现一个增量数(来自“NumberID”)。

我想说的是,对于每支球队的20名球员,必须在“职位”栏下输入以下职位:

  • GK (只适用于2名玩家(换句话说,10%的玩家)
  • DF (只适用于6名玩家(换句话说,30%的玩家)
  • MF (只适用于6名玩家(换句话说,30%的玩家)
  • FW (只适用于6名玩家(换句话说,30%的玩家)

然后根据他们的位置,为每个玩家执行一个随机的‘PlayerWeighting’,根据他们在1-100之间的‘位置’。

  • GK -玩家权重的前3% (0 -3)
  • DF-4%- 30%的玩家权重(4-30)
  • MF - 31% - 60%的玩家权重(31 - 60)
  • FW-61%- 99%的玩家权重(61-99),我能在编码这一点上有帮助吗?下面是我目前所拥有的以及它所产生的输出: 创建过程dbo.Player_CreateWholeTeam @TeamID INT作为select在开始插入到dbo.Player (FirstName,姓氏,TeamID)选择TeamName作为FirstName,'Player‘+ cast(NumberID AS VARCHAR (10))作为姓氏,@TeamID从dbo.Team t交叉加入dbo.Number n,其中TeamID = @TeamID和n.NumberID <= 20 -abs(校验和(newid()% 99) +1作为PlayerWeighting,选择*来自dbo.Player END 输出(“Player”表):

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-08 14:58:25

只需对您的搜索案例表达式中的其余两列使用SELECT

代码语言:javascript
复制
CASE
  WHEN n.NumberId BETWEEN 1 AND 2 THEN 'GK'
  WHEN n.NumberId BETWEEN 3 AND 8 THEN 'DF'
  ...
END AS Position,
CASE
  WHEN n.NumberId BETWEEN 1 AND 2 THEN ABS(CHECKSUM(NEWID())) % 4
  WHEN n.NumberId BETWEEN 3 AND 8 THEN ABS(CHECKSUM(NEWID())) % 27 + 4
  ...
END AS PlayerWeigthing,

如果你也想随机化玩家号码,你必须为你的数字创建一个随机映射,如下所示:

代码语言:javascript
复制
DECLARE @RNumber AS TABLE(n int IDENTITY(1,1), rn INT)

INSERT @RNumber 
  SELECT NumberID as rn FROM dbo.Number
    WHERE NumberID <= 20
    ORDER BY CHECKSUM(NEWID())

然后,您可以使用它来代替原来的数字表,并在需要时使用nrn

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37701268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档