我尝试构建一个适合更大 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]
...
Run Code Online (Sandbox Code Playgroud)
但事实上,我有时会得到“其他”结果,这告诉我每个 WHEN 都会创建不同的随机数进行评估。我也无法在开始时声明全局随机数并使用它,因为每一行都应该单独解析。
我有一个我需要修改的查询.它目前每个参考都有一行,15分钟的时间段和相关的帐号.我的目标是每15分钟阻止一行,说明在该阻止期间最常出现的帐号.
SELECT
left(cast(Concat([Hour],':',[Minute]) as time),5) as [Time Block]
,[Reference]
,[Account]
from(
SELECT
DATEPART(hh,[Start Time]) as [Hour]
,[Reference]
,case when DATEPART(mi,[Start Time]) between 00 and 15 then '00'
when DATEPART(mi,[Start Time]) between 15 and 30 then '15'
when DATEPART(mi,[Start Time]) between 30 and 45 then '30'
when DATEPART(mi,[Start Time]) between 45 and 100 then '00'
else 'Error' end AS [Minute]
,[Account]
FROM [iPR].[dbo].[InboundCallsView]
where [Start Time] between '2017-03-21' and '2017-03-22')T
order by [Time Block]
Run Code Online (Sandbox Code Playgroud)
这给出了输出
我不需要参考号码,但我想要
00:00 310523
00:15 310523
00:30 …
下图显示了一个帐户表和我想要计算的结果.即每次帐号为106844,结果为"MESSAGE"或"ESCALATION EMAIL",应该算作1,其他任何结果都算为0.我通常做的是像Iifs这样可怕的混乱
sum( iif([account] = '106719' and [Outcome] in ('MESSAGE','ESCALATION_EMAIL'),1,iif([account] = '310827' and [outcome] <> 'ABORT' and 'CALL_OUTCOME_LB' in ("Call patched to Customer Care","Message Taken"),1,iif( ... , 0) as [Total Outcomes]
Run Code Online (Sandbox Code Playgroud)
等等,但男人觉得必须有一个更简单的方法,或者更不容易在第7个嵌套的iif中犯一个随机的错误并弄乱整个事情.有任何想法吗?