我尝试过使用CASE WHEN语句,但似乎我错过了一些东西,或者这不是正确的做法。 @APASS参数使查询返回通过的人或指定考试失败的人。
SELECT ID, Name,ZipCode,Mobile
FROM tblStudent
WHERE (Sex = @Sex) AND (ID IN
(SELECT StID
FROM tblTest
WHERE (TestID = @TestID) AND
CASE WHEN @APass = TRUE THEN (Score IN (27, 28, 29, 30))
ELSE (Score NOT IN (27, 28, 29, 30))
END
GROUP BY StID, TestID
HAVING (COUNT(*) = @Times)))
答案 0 :(得分:1)
在你的情况下如何:
WHERE TestID = @TestID
AND
(
(@APass = 'TRUE' AND Score IN (27, 28, 29, 30))
OR (@APass = 'FALSE' AND Score NOT IN (27, 28, 29, 30))
)
或者您可以创建两个单独的查询,一个用于传递,另一个用于失败。如果您关心性能,这可能是最有效的。
你也可以做一些可爱的事情:
WHERE TestID = @TestID
AND @APass=IF(Score IN (27, 28, 29, 30),'TRUE','FALSE')
但我想知道这是否会真正为您提供优化查询。