2014-01-22 102 views
0

下面是一個使用CASE我目前的更新語句。簡化case語句

UPDATE A 
SET OAP.GradeRange = 
     CASE WHEN (ABS(CAST(A.GRADE_FROM AS INT) - CAST(A.GRADE AS INT))) > 1 THEN 'Y' 
     ELSE 'N' END 
FROM dbo.Table A 

我如何下面添加一個額外的過濾器進入上述CASE

where (grade_from <> 13 and GRADE <> 15) 
OR (grade_from <> 15 and GRADE <> 13) 

我想是這樣的:

UPDATE A 
    SET OAP.GradeRange = 
      CASE WHEN (ABS(CAST(A.GRADE_FROM AS INT) - CAST(A.GRADE AS INT))) AND (grade_from <> 13 and GRADE <> 15) OR (grade_from <> 15 and GRADE <> 13) > 1 THEN 'Y' 
      ELSE 'N' END 
    FROM dbo.Table A 

如果有什麼更好的方式來寫,請指教。謝謝。

+1

如果你希望它能夠正常工作,你可能需要在你的或/和條件內部的括號內(在演員之後) – Bohemian

回答

0

試試這個。

我認爲> 1(大於1)應該在第一個條件後出現。

UPDATE A 
    SET OAP.GradeRange = 
      CASE WHEN (ABS(CAST(A.GRADE_FROM AS INT) - CAST(A.GRADE AS INT)) > 1) AND ((grade_from NOT IN ('13','15')) OR (GRADE NOT IN ('13','15'))) THEN 'Y' 
      ELSE 'N' END 
    FROM dbo.Table A 
2

case缺少一個額外的括號,所以它不是做你想要什麼:

UPDATE A 
    SET OAP.GradeRange = 
      CASE WHEN (ABS(CAST(A.GRADE_FROM AS INT) - CAST(A.GRADE AS INT))) AND 
         ((grade_from <> 13 and GRADE <> 15) OR (grade_from <> 15 and GRADE <> 13) > 1) 
       THEN 'Y' 
       ELSE 'N' END 
    FROM dbo.Table A;