我在GamePlayers表中有以下数据:
GameId PlayerId BotId
1 100 NULL
1 200 NULL
2 100 NULL
2 NULL NULL
3 200 NULL
3 NULL 100
我想举报人/计算机/机器人游戏的百分比。计算机和机器人游戏分开处理。如果我把它放到CASE声明中,它就是一个简单的
CASE WHEN PlayerId IS NOT NULL THEN 'Human'
WHEN PlayerId IS NULL AND BotId IS NULL THEN 'Computer'
WHEN PlayerId IS NULL AND BotId IS NOT NULL THEN 'Bot'
END OpponentType
但当然我需要通过GameId对数据进行分组,以便删除重复的GameId。
计算机和机器人永远不能相互对抗。一个人类可以挑战一个人类,但如果他在30秒后没有得到回复,他将被提议与一个Bot对战。人类也可以选择单独与电脑对战。
我需要做的是将一个值设置为“人类' BOT'或者'计算机'然后在Power BI上报告它。如何对数据进行分组以确定人类对手是否与人类,机器人或计算机对战?
这是我预期的结果集:
GameId GameType
1 Human
2 Computer
3 Bot
答案 0 :(得分:1)
我使用了您的查询,如下所示:
Select GameId,
case when max(OpponentType) = mIn(opponenttype) and Min(opponenttype) = 'Human' then 'Human'
when min(opponenttype) = 'Computer' then 'Computer'
when min(opponenttype) = 'Bot' then 'Bot' else null end as OpponentType
from ( Select GameId , CASE WHEN PlayerId IS NOT NULL THEN 'Human'
WHEN PlayerId IS NULL AND BotId IS NULL THEN 'Computer'
WHEN PlayerId IS NULL AND BotId IS NOT NULL THEN 'Bot'
END OpponentType
from #Game ) a
group by gameid
您不需要在子查询中执行opponenttype,而是可以在主查询本身中执行此操作
答案 1 :(得分:1)
您可以通过下面的查询
在组中使用案例 select
gameId,
case
WHEN count(PlayerId)=2 THEN N'Human'
WHEN count(BotId) =1 THEN N'Bot'
WHEN count(BotId) =0 AND count(PlayerId)=1 THEN 'Computer'
END as OpponentType
from GamePlayers group by GameId