如何在sql中指定分支?

时间:2012-09-14 14:01:42

标签: sql sql-server case-when

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

1 个答案:

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

但我想知道这是否会真正为您提供优化查询。