SQL Else If 语句从另一列的数值到 return 文本值 - 不起作用
SQL Else If statement to return text value from numeric value of another column - not working
我需要一个计算列 Site_Condition
,它将 return 一个基于同一 table 中另一列 Condition_Score
的数值的文本值.
下面是我尝试插入到计算列规范中的内容,但我收到了这条消息:
Error validating the formula
我也尝试使用下面相同的语法从脚本 "Create table as" 创建它,即: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'))))))
在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
但为了完整起见,这里是 IIF()
版本(注意额外的“I
”,"Immediate 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'))))
如果我没记错的话,IIF()
直到 Sql Server 2016 才可用。
这些还修复了一个错误,即如果分数 正好 3.51,结果将是 NULL
.
这是...执行查询的简单方法...
DECLARE @Condition_Score AS DECIMAL
SET @Condition_Score=1.25
DECLARE @Message AS VARCHAR(50)
IF(@Condition_Score<0.51)
BEGIN
SET @Message ='Very poor'
END
else IF(@Condition_Score<1.51)
BEGIN
SET @Message ='poor'
END
ELSE IF(@Condition_Score<2.51)
BEGIN
SET @Message ='Moderate'
END
ELSE IF (@Condition_Score<3.51)
BEGIN
SET @Message ='Good'
END
ELSE IF(@Condition_Score>3.51)
BEGIN
SET @Message='Excellent'
END
PRINT @Message
注意:-此处“PRINT @Message”用于检查当前输出
我需要一个计算列 Site_Condition
,它将 return 一个基于同一 table 中另一列 Condition_Score
的数值的文本值.
下面是我尝试插入到计算列规范中的内容,但我收到了这条消息:
Error validating the formula
我也尝试使用下面相同的语法从脚本 "Create table as" 创建它,即: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'))))))
在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
但为了完整起见,这里是 IIF()
版本(注意额外的“I
”,"Immediate 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'))))
如果我没记错的话,IIF()
直到 Sql Server 2016 才可用。
这些还修复了一个错误,即如果分数 正好 3.51,结果将是 NULL
.
这是...执行查询的简单方法...
DECLARE @Condition_Score AS DECIMAL
SET @Condition_Score=1.25
DECLARE @Message AS VARCHAR(50)
IF(@Condition_Score<0.51)
BEGIN
SET @Message ='Very poor'
END
else IF(@Condition_Score<1.51)
BEGIN
SET @Message ='poor'
END
ELSE IF(@Condition_Score<2.51)
BEGIN
SET @Message ='Moderate'
END
ELSE IF (@Condition_Score<3.51)
BEGIN
SET @Message ='Good'
END
ELSE IF(@Condition_Score>3.51)
BEGIN
SET @Message='Excellent'
END
PRINT @Message
注意:-此处“PRINT @Message”用于检查当前输出