2012-09-14 6 views
-1

나는 CASE WHEN 문을 사용하여 시도했다. 그러나 내가 뭔가를 놓친 것처럼 보이거나이 올바른 방법이 아닙니다. @APASS 매개 변수는 지정된 시험을 통과 한 사람이나 통과 한 사람을 반환하도록 쿼리를 만듭니다. 귀하의 경우에는SQL에서 분기를 어떻게 지정할 수 있습니까?

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

'TRUE'는 어디에서 왔습니까? SQL Server에는 부울 유형이 없습니다. '@ APass'의 가치는 무엇입니까? – RedFilter

+0

APASS는 Tye 비트입니다. 참인지 거짓인지 확인합니다. – Breeze

답변

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

을하지만 진정 당신에게 최적화 된 쿼리를 줄 것이다 경우 다시 궁금하다.

+0

진심으로 감사드립니다.) – Breeze