【发布时间】:2018-01-30 20:07:54
【问题描述】:
我试图构造一个适合更大 SELECT 的 CASE 语句。我希望每一行单独解析(每行使用不同的随机数),但是如果有意义的话,在评估特定行中的 case 语句时随机数是相同的。
我试过了
SELECT
[Player name]
,[Stake]
,[current jackpot]
,CASE
WHEN
rand() < 0.23
THEN
'Win'
WHEN
rand() BETWEEN 0.23 AND 0.89
then
'Lose'
when
rand() >= 0.89
then
'Jackpot'
else
'other'
end as [outcome]
...
但我有时会得到“其他”结果的事实告诉我,每个 WHEN 都在创建一个不同的随机数来评估。我也不能在开始时声明一个全局随机数并使用它,因为每一行都应该单独解析。
【问题讨论】:
-
你可以声明一个变量并保存这个 rand() 值并在你的查询中使用它
-
您可以使用 rownumber 之类的内容作为种子,这将使每一行都相同,但其他行不同。然后可能将
Minute(Now())添加到行中,以便在运行之间有所不同 -
上述重复并不是真正的重复。在这种情况下,OP 在
SELECT中多次引用相同的随机数。这会有所不同。 -
当 rand_value
-
@ventik - 不幸的是,T-SQL 无法保证它将评估函数/表达式的次数与该函数/表达式以文本形式出现在查询中的次数。
标签: sql sql-server random