SQL中的嵌套大小写引用不同的字段

时间:2016-10-26 17:16:47

标签: sql sql-server nested case

我在SQL中有一个嵌套的case循环,我在2016年之前检查它的日期然后设置status = 3,否则根据当前状态更改状态。我在以下代码中收到错误

case
  when x.myDate is not null and x.myDate < Convert(datetime, '2015-12-31') then x.myStatus = '3'
  else
     case 
      when x.myStatus = 1 then '2'
      when x.myStatus = 3 then '1'
      when x.myStatus = 2 then '3'
     else ''
     end
 end
  

错误:&#39; =&#39;附近的语法不正确在第二行

请帮忙

3 个答案:

答案 0 :(得分:0)

x.myStatus = '3'声明CASE中的这个Then不能这样。 Then仅允许有效的表达式

  

表达式是SQL的符号和运算符的组合   服务器数据库引擎评估以获取单个数据值。简单表达式可以是单个常量,变量,列或标量函数。运算符可用于将两个或多个简单表达式连接到复杂表达式中。

这是正确的方法

SELECT myStatus = CASE
                    WHEN x.myDate IS NOT NULL
                         AND x.myDate < CONVERT(DATETIME, '2015-12-31') THEN '3'
                    ELSE
                      CASE x.myStatus
                        WHEN 1 THEN '2'
                        WHEN 3 THEN '1'
                        WHEN 2 THEN '3'
                        ELSE ''
                      END
                  END 

答案 1 :(得分:0)

set x.myStatus =
case when x.myDate is not null and x.myDate < Convert(datetime, '2015-12-31') then '3'
     when x.myStatus = 1 then '2'
     when x.myStatus = 3 then '1'
     when x.myStatus = 2 then '3'    
     else ''
end

答案 2 :(得分:0)

更改此行:

when x.myDate is not null and x.myDate < Convert(datetime, '2015-12-31') then x.myStatus = '3'

到此:

when x.myDate is not null and x.myDate < Convert(datetime, '2015-12-31') then '3'