簡體   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