在case表达式中无法识别列别名

时间:2014-01-08 01:49:46

标签: sql sql-server case calculated-columns

我在查询的计算列中有一个案例表达式,其平均值为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_Refdbo.SU_ENTITY_TYPE.Ref的别名。当我在条件中使用Form_Ref时,它总是默认为ELSE子句。当我明确指定dbo.SU_ENTITY_TYPE.Ref时,它会执行THEN子句,但计算出的平均值会向下舍入到最接近的整数。我需要最多两位小数。

有关别名未被识别的原因的任何输入?谢谢!


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

1 个答案:

答案 0 :(得分:1)

首先,您不需要嵌套的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

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