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

または、合格用と不合格用の 2 つの個別のクエリを作成することもできます。パフォーマンスを重視する場合は、これがおそらく最も効率的です。

次のようなかわいいこともできます。

WHERE TestID = @TestID
AND @APass=IF(Score IN (27, 28, 29, 30),'TRUE','FALSE')

しかし、これが本当に最適化されたクエリを提供するかどうかは疑問です。

于 2012-09-14T14:10:52.527 に答える