我的更改之前的代码(工作得非常好):
CASE WHEN b.EPIdentifier IS NOT NULL THEN b.EndTime
我尝试实现一些进一步的嵌套时的更改,然后是逻辑:
CASE WHEN b.EPIdentifier IS NOT NULL THEN
CASE WHEN b.CancelEndTime IS NOT NULL THEN
b.CancelEndTime
ELSE CASE WHEN b.ExtendedEndDate IS NOT NULL THEN
b.ExtendedEndDate
ELSE CASE WHEN b.EndTime IS NOT NULL THEN
b.EndTime
ELSE a.EndDate END EndDate
我在最后EndDate
收到错误:
在期望条件的上下文中指定的非布尔类型的表达式
我无法弄清楚为什么我会收到错误。我试图改为AS EndDate
,但我仍然得到同样的错误。我是否因为筑巢而弄乱了什么?我无法发现任何事情。
答案 0 :(得分:2)
您必须在每个END
上加CASE WHEN
。你的表达应该是这样的:
CASE WHEN b.EPIdentifier IS NOT NULL THEN
CASE WHEN b.CancelEndTime IS NOT NULL THEN b.CancelEndTime
ELSE CASE WHEN b.ExtendedEndDate IS NOT NULL THEN b.ExtendedEndDate
ELSE CASE WHEN b.EndTime IS NOT NULL THEN b.EndTime END
END
END
ELSE a.EndDate END EndDate
无论如何,您可以使用COALESCE简化表达:
CASE WHEN b.EPIdentifier IS NOT NULL THEN COALESCE(b.CancelEndTime, b.ExtendedEndDate, b.EndTime)
ELSE a.EndDate END EndDate
来自 MSDN :
COALESCE表达式是CASE表达式的语法快捷方式。也就是说,代码COALESCE(expression1,... n)被查询优化器重写为以下CASE表达式:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
...
ELSE expressionN
END
答案 1 :(得分:0)
END是CASE语句的一部分,因此您必须查找END。
SYNTAX FOR CASE声明: SQL CASE
Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END