SQL Else If语句从另一列的数值返回文本值-不起作用

cat*_*ate 0 sql sql-server sql-server-2014

我需要有一个计算列Site_Condition,该列将基于Condition_Score同一表中另一列的数值返回一个文本值。

以下是我尝试插入“计算列规范”中的内容,但收到此消息:

验证公式时出错

我还尝试过使用下面的相同语法从脚本“创建表为”创建它,例如:Site_Condition AS(IF ....)

我究竟做错了什么?

IF([Condition_Score]<0.51,'Very poor',(ELSE  
IF([Condition_Score]<1.51,'Poor', ELSE 
IF([Condition_Score]<2.51,'Moderate',ELSE 
IF([Condition_Score]<3.51,'Good',ELSE 
IF([Condition_Score]>3.51,'Excellent'))))))
Run Code Online (Sandbox Code Playgroud)

Joe*_*orn 5

在SQL中,我们使用CASE而不是IF

CASE WHEN [Condition_Score]<0.51 THEN 'Very poor'
     WHEN [Condition_Score]<1.51 THEN 'Poor'
     WHEN [Condition_Score]<2.51 THEN 'Moderate'
     WHEN [Condition_Score]<3.51 THEN 'Good' 
     ELSE 'Excellent' END
Run Code Online (Sandbox Code Playgroud)

但是为了完整起见,这里是IIF()版本(请注意额外的“ I”,是“立即If”的缩写):

IIF([Condition_Score]<0.51, 'Very poor',
    IIF([Condition_Score]<1.51, 'Poor',
    IIF([Condition_Score]<2.51, 'Moderate',
    IIF([Condition_Score]<3.51,'Good',
        'Excellent'))))
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,IIF()直到Sql Server 2016才可用。

这些还修复了一个错误,即如果分数恰好是 3.51,则结果将是NULL