Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 检查表是否有特定的行值_Sql Server_Tsql - Fatal编程技术网

Sql server 检查表是否有特定的行值

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

我有两张表,分别是game和
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的游戏,因此没有任何其他状态。