尝试嵌套 CASE WHEN THEN 语句时出现"Condition expected"错误



更改之前的代码(运行良好):

CASE WHEN b.EPIdentifier IS NOT NULL THEN b.EndTime

我在尝试实现一些进一步嵌套的CASE when THEN逻辑时所做的更改:

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,但还是得到了同样的错误。我是不是把嵌套搞砸了?我什么都看不见。

您必须在每个CASE WHEN上放置一个END。你的表达应该是这样的:

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(表达式1,…n)由查询优化器重写为以下CASE表达式:

CASE
   WHEN (expression1 IS NOT NULL) THEN expression1
   WHEN (expression2 IS NOT NULL) THEN expression2
   ...
   ELSE expressionN
END 

END是CASE语句的一部分,因此您必须查找END。

案例陈述语法:SQL案例

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

相关内容

最新更新