以下是我使用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
如果有更好的方法可以提供建议。谢谢。
答案 0 :(得分: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;
答案 1 :(得分:0)
试试这个。
我认为&gt; 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