繁体   English   中英

在大小写表达式中无法识别列别名

[英]Column alias is not recognized in case expression

我在查询的计算列中有一个case表达式,该表达式的平均值为DATA_SCALE_1DATA_SCALE_2DATA_SCALE_3DATA_SCALE_4 ,其中所有均为数据类型整数。

CASE  
    WHEN Form_Ref = 1091 
    THEN (DATA_SCALE_1 + DATA_SCALE_2 + DATA_SCALE_3 + DATA_SCALE_4)/4
    ELSE 
        CASE WHEN DATA_SCALE_1 IS NOT NULL 
        THEN DATA_SCALE_1
        ELSE 
            OLD_FIELD_CUST_TBL.SELECT_TEXT
        END
END AS Satisfaction

Form_Ref是一个别名dbo.SU_ENTITY_TYPE.Ref 在条件中使用Form_Ref时,它始终默认为ELSE子句。 当我显式指定dbo.SU_ENTITY_TYPE.Ref ,它将执行THEN子句,但计算的平均值将向下舍入为最接近的整数。 我需要最多保留两位小数。

为什么不能识别别名的任何输入? 谢谢!


更新:
为了将平均值限制为两位小数,我使用了
CAST(CaseExpression AS NUMERIC(x,2)) ,其中x是包括2个十进制数字在内的最大位数。

首先,您不需要嵌套的case语句。 这应该产生相同的逻辑:

(CASE WHEN Form_Ref = 1091 
      THEN (DATA_SCALE_1 + DATA_SCALE_2 + DATA_SCALE_3 + DATA_SCALE_4) / 4.0
      WHEN DATA_SCALE_1 IS NOT NULL 
      THEN DATA_SCALE_1
      ELSE OLD_FIELD_CUST_TBL.SELECT_TEXT
 END) AS Satisfaction

其次,列别名不能在定义的相同级别上使用。 您所描述的行为听起来好像在表中(在from子句中)有一个名为Form_Ref的列,而Form_Ref是别名的目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM