Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在大小写表达式中无法识别列别名_Sql_Sql Server_Case_Calculated Columns - Fatal编程技术网

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

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_

我在查询的计算列中有一个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_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
字段都是整数。