2016-11-07 93 views
1

我有兩個表稱爲遊戲和gameprogressGameprogress有一個名爲state的列描述了進度。遊戲與gameprogress槽有關。檢查表是否具有特定的行值

可能的狀態是:1,3,4在gameprogress中。

我想找到遊戲沒有state = 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 

回答

1

您可以在HAVING子句中使用CASE EXPRESSION

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(*) 
+0

外貌像正確的路要走。但我有一個問題沒有得到與狀態= 4的遊戲,我試圖:選擇g.id 從遊戲g 左加入gameprogress gp在g.id = gp.gameid 其中g.gamestate!= 2和gp.state!= 4 GROUP BY g.id HAVING COUNT(CASE WHEN gp.state = 1 THEN 1 END)= 0 – farnholdt

+0

爲什麼它應該返回state = 4的遊戲?我應該猜數據嗎?編輯問題並提供數據示例! – sagi

+0

我的錯。編輯了這個問題。 – farnholdt

相關問題