我在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秒后没有得到回应,他将被提供与机器人比赛。人类也可以选择单独与计算机进行游戏。
我需要做的是给一组'Human','Bot‘或'Computer’设置一个值,然后在Power BI上报告它。我如何对数据进行分组,以找出人类对手是否与人类、机器人或计算机对战?
这是我预期的结果集:
GameId GameType
1 Human
2 Computer
3 Bot发布于 2017-07-19 18:25:31
您可以在group by查询中使用案例,如下所示
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 发布于 2017-07-19 18:11:05
我按如下方式使用了您的查询:
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您不需要在子查询中执行对抗类型,而可以在主查询本身中执行此操作
https://stackoverflow.com/questions/45186718
复制相似问题