-1

我尝试使用 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)))
4

1 回答 1

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')

但我再次想知道这是否真的会给你一个优化的查询。

于 2012-09-14T14:10:52.527 回答