2014-01-08 2 views
0

У меня есть выражение случай в вычисляемого столбца в запросе, который будет средние значения DATA_SCALE_1, DATA_SCALE_2, DATA_SCALE_3, DATA_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 десятичных чисел.

+1

Разделите на '4.0'. Я предполагаю, что все поля 'DATA_SCALE' являются ** целыми числами **. –

ответ

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, являющийся целью псевдонима.