Sql 在大小写表达式中无法识别列别名
我在查询的计算列中有一个case表达式,它将平均Sql 在大小写表达式中无法识别列别名,sql,sql-server,case,calculated-columns,Sql,Sql Server,Case,Calculated Columns,我在查询的计算列中有一个case表达式,它将平均DATA\u SCALE\u 1,DATA\u SCALE\u 2,DATA\u SCALE\u 3,DATA\u SCALE\u 4的值,其中所有值都是数据类型integer CASE WHEN Form_Ref = 1091 THEN (DATA_SCALE_1 + DATA_SCALE_2 + DATA_SCALE_3 + DATA_SCALE_4)/4 ELSE CASE WHEN DATA_
DATA\u SCALE\u 1
,DATA\u SCALE\u 2
,DATA\u SCALE\u 3
,DATA\u SCALE\u 4
的值,其中所有值都是数据类型integer
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\u Ref
是dbo.SU\u ENTITY\u TYPE.Ref的别名。当我在条件中使用Form_Ref
时,它总是默认为ELSE子句。当我显式指定dbo.SU_ENTITY_TYPE.Ref时,它执行THEN子句,但计算的平均值向下舍入到最接近的整数。我需要它最多在小数点后两位
关于别名为何无法识别的任何输入?谢谢
更新:
为了将平均数限制在小数点后两位,我使用了
CAST(case表达式为数字(x,2))
其中,
x
是包括两个十进制数在内的最大位数。首先,不需要嵌套的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\u-Ref
的列(在from
子句中),并且Form\u-Ref
是别名的目标。除以4.0
。我假设所有数据\u SCALE
字段都是整数。