Sql server 检查表是否有特定的行值
我有两张表,分别是game和Sql server 检查表是否有特定的行值,sql-server,tsql,Sql Server,Tsql,我有两张表,分别是game和gameprogressGameprogress有一个名为state的列来描述进度。游戏通过id与gameprogress相关 可能的状态为:1,3,4正在进行游戏 我想找到没有状态=1和状态=4的游戏。我试过这样的方法: select top 10 gp.gameid, count(gp.state) as dup from gameprogress gp join game g on g.id= gp.gameid where g.gamestate != 2
gameprogress
Gameprogress
有一个名为state
的列来描述进度。游戏通过id与gameprogress
相关
可能的状态为:1,3,4正在进行游戏
我想找到没有状态=1和状态=4的游戏。我试过这样的方法:
select top 10 gp.gameid, count(gp.state) as dup
from gameprogress gp
join game g on g.id= gp.gameid
where g.gamestate != 2 and gp.state != 1
group by gp.gameid
having count(gp.state)>1
您可以在
HAVING
子句中使用大小写表达式
:
SELECT TOP 10 g.gameid
FROM game g
LEFT JOIN gameprogress gp
ON g.id= gp.gameid
GROUP BY g.gameid
HAVING COUNT(CASE WHEN gp.state = 3 THEN 1 END) = COUNT(*)
看起来是正确的选择。但是我遇到了一个问题,无法获得状态为4的游戏,我尝试过:从游戏g中选择g.id LEFT JOIN gameprogress gp ON g.id=gp.gameid其中g.gamestate!=2和gp.state!=4按g.id分组,有计数(如果gp.state=1,那么1 END=0,为什么要返回状态为4的游戏?我应该猜数据吗?编辑问题并提供数据样本!是我的错。编辑了问题。@farnholdt所以你只想要那些状态为4或2的人?解释原因,这样我就知道要添加哪些过滤器了。我只想要那些状态为3的游戏,因此没有任何其他状态。