【问题标题】:case when statementcase when 语句
【发布时间】:2017-04-05 00:19:28
【问题描述】:

我收到一条错误消息,指出在预期条件的上下文中指定了非布尔类型的表达式,该语句有什么问题?

CASE WHEN (TEAR.REASONS_FOR_TEARDOWN IN (21,17) 
           AND (SELECT COUNT(ELEMENTNAME) 
                  FROM EINSPECTION_TABLE T 
                        INNER JOIN EINSPECTION_MAIN M 
                              ON T.ELEMENTID=M.ELEMENTID 
                 WHERE ELEMENTTYPE = 'TD' 
                   AND ENGINEID=1650 
                   AND STATUS IN (1126,1127))>1) 
     THEN 'YC' 

【问题讨论】:

  • 你在代码的其余部分中有end 你的case 表达式吗?
  • 如果您向我们展示该案例表达式的使用位置会有所帮助
  • @Stephen 用同样的评论打败了我 :)

标签: sql sql-server


【解决方案1】:

你需要end你的case表达式。可以选择包含else

case when (TEAR.REASONS_FOR_TEARDOWN in (21, 17) 
        and (
          select COUNT(ELEMENTNAME)
          from EINSPECTION_TABLE T
            inner join EINSPECTION_MAIN M 
              on T.ELEMENTID = M.ELEMENTID
          where ELEMENTTYPE = 'TD' 
            and ENGINEID = 1650 
            and status in (1126, 1127)
            ) > 1
          ) 
      then 'YC'
    else null
    end

【讨论】:

  • 我给最后一个条件加了一个end case,但还是一样,上面的查询是第二种情况,所以没有提到END case
  • @Reddy 请在编辑您的问题时发布整个声明。
【解决方案2】:

当 (TEAR.REASONS_FOR_TEARDOWN IN ('21', '17') 时的情况

你还需要一个案例的结束声明

【讨论】:

  • REASONS_FOR_TEARDOWN 是数字,即使我加上引号也会引发错误,而且我在查询中添加了 end 语句。
  • REASONS_FOR_TEARDOWN 字段的类型没有表明您建议在其上添加单引号。此外,根据您的建议,这不是一个完整的答案,因为 SqlZim 在他的添加。
猜你喜欢
  • 2016-12-10
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
相关资源
最近更新 更多