你的type是多少呢?写这么多case 嵌套,可读性很差...

解决方案 »

  1.   

    你把substring('Itemno',4,2) <'30' 用select substring('Itemno',4,2) <'30'  from 表查出来自然就清楚了
      

  2.   


    明白了,可能因为Itemno是Varchar类型,有办法转换么?
      

  3.   

    case那么多,考虑考虑用查询及临时表。
      

  4.   

    这样改吧
    type in ('SLML')  then  (case when Itemno like 'YPY%' then (case when substring('Itemno',4,2) <'30' then Sprice18 else Sprice17 
    改:
    case when type in ('SLML') and Itemno like 'YPY%' and substring('Itemno',4,2) <'30' 
    then Sprice18 else Sprice17 end
      

  5.   

     substring('Itemno',4,2) <'30' ---> substring('Itemno',4,2) <30 
      

  6.   

    case when type in ('XLML')
         then (
                 case when Itemno like 'YPY%'  
                       then(
                             case when substring('Itemno',4,2) <'30' 
                                   then SPrice12 
                                   else SPrice11 end) 你的表结构贴出来,不然大家不清楚你的要求!
    请注意你的书写格式
      

  7.   


    Server: Msg 245, Level 16, State 1, Line 1
    将 varchar 值 'mn' 转换为数据类型为 int 的列时发生语法错误。
      

  8.   

    说明你的substring('Itemno',4,2)存在非数字。如果用'30',不会报错,但是你将进行的是字符串的比较,恐怕得不到你要的结果。(比如10>2,but '10'<'2')如果用30,你有非数字存在,会报错。要么把数据更改一下,要么先用临时表把结果过滤一下。
      

  9.   

    突然发现你把Itemno用引号引起来了
    substring('Itemno',4,2) <30 ---> substring(Itemno,4,2) <30