为什么';如果';逻辑在SQL存储过程中不起作用?

为什么';如果';逻辑在SQL存储过程中不起作用?,sql,sas,Sql,Sas,我想在SQL存储过程中输入以下逻辑: IF(I2<=13.5,"<=13.5%", IF(I2<=14,"13.5% - 14%", IF(I2<=14.5,"14% - 14.5%", IF(I2<=15,"14.5% - 15%", IF(I2<=16,"15% - 16%", IF(I2<=18,"16% - 18%", IF(I2<=20,"18% - 20%",">20%")) ) 如果(I2试

我想在SQL存储过程中输入以下逻辑:

IF(I2<=13.5,"<=13.5%",
   IF(I2<=14,"13.5% - 14%",
   IF(I2<=14.5,"14% - 14.5%",
   IF(I2<=15,"14.5% - 15%",
   IF(I2<=16,"15% - 16%",
   IF(I2<=18,"16% - 18%",
   IF(I2<=20,"18% - 20%",">20%"))
)
如果(I2试试这个

  CASE
        WHEN t1.irr___current IS NULL   THEN '???'
        WHEN t1.irr___current <= 13.5   THEN '<=13.5%'
        WHEN t1.irr___current <= 14     THEN '13.5% - 14%'
        WHEN t1.irr___current <= 14.5   THEN '14% - 14.5%'
        WHEN t1.irr___current <= 15     THEN '14.5% - 15%'
        WHEN t1.irr___current <= 16     THEN '15% - 16%'
        WHEN t1.irr___current <= 18     THEN '16% - 18%'
        WHEN t1.irr___current <= 20     THEN '18% - 20%'
        ELSE '>20%'
  END
案例
当t1.irr\uuuu电流为空时,则“??”

当t1.irr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu部分?看起来您正试图构建where子句信息,包括带有case语句的运算符,这是不可能的,至少在MS SQL中是不行的,如果您需要这样做,您需要构建动态SQL并执行它。Kritner-您的意思是说,上面提到的if逻辑可以使用where子句执行?…我不明白你的意思?我是个初学者,你能详细解释一下吗?你为什么用Coalesce而不是嵌套的Case?我认为你当前的脚本也不能执行,因为你从来没有为“else”指定过任何有效的表达式Part您使用的是哪种DBMS?SQL Server?Postgres?感谢用户2067753,我对此表示感谢。您能解释一下为什么第二个条件不起作用吗?…例如,当..结束有效,但第二个是案例t1.irr,然后是什么时候…不起作用?事实上,第二个似乎是编写代码的更有效的方法;这种异常现象的原因是什么?对不起,我没有注意到这些评论。我对否决票很好奇,所以我再次查看,发现我使用了双引号,这是错误的。所以我改变了我最初提供的更简短的表单并不是一个我非常熟悉的表单,它不适用于所有dbms平台-您使用的是哪种数据库?好的,我无法使用mssql使第二个表单工作,除非我与特定的数字匹配,所以类似于SAS Enterprise guide 6.1=>这样的比较表单更有理由保持w使用传统的表单;它可能看起来更冗长;但至少它可以在SQL允许的任何地方工作。明白了!!…很有趣但很有趣。谢谢!。是的&我不知道为什么会投反对票。抱歉,我不能投票,因为我今天刚加入。但是你的建议很完美。
  CASE
        WHEN t1.irr___current IS NULL   THEN '???'
        WHEN t1.irr___current <= 13.5   THEN '<=13.5%'
        WHEN t1.irr___current <= 14     THEN '13.5% - 14%'
        WHEN t1.irr___current <= 14.5   THEN '14% - 14.5%'
        WHEN t1.irr___current <= 15     THEN '14.5% - 15%'
        WHEN t1.irr___current <= 16     THEN '15% - 16%'
        WHEN t1.irr___current <= 18     THEN '16% - 18%'
        WHEN t1.irr___current <= 20     THEN '18% - 20%'
        ELSE '>20%'
  END