2016-01-06 112 views
4

我怎樣才能在相同的查詢中使用列別名別的地方?在Oracle中可能嗎?使用列別名選擇

示例使用EMP_ID:

SELECT 
    t1.DATE, t2.NAME, t1.ID, 
    TO_NUMBER(SUBSTR(t1.NUMBER_ID, - 6) 
     || TRIM(TO_CHAR(SUBSTR(EMP_ID, 3, 2), '00')), '999999999999') AS CONTRACT, 
    t2.ADDRESS, 
    CASE WHEN SUBSTR(t2.COD_EMP, 0, 2) != 'PG' THEN 'PG00' 
     || t2.COD_EMP ELSE t2.COD_EMP END AS EMP_ID 
FROM 
    TABLE_01 t1 
    INNER JOIN TABLE_02 t2 ..... 
+3

不,你不能,除非你有一個子查詢與別名的列 – HoneyBadger

+0

您可在'爲了使用它by'條款是肯定的。 –

+0

的可能的複製[使用別名當甲骨文的SQL case語句的一部分(http://stackoverflow.com/q/17591707/266304)(以及其他許多) –

回答

3

如果您檢查documentation,你會看到,你只被允許使用它order by子句中:

指定的別名列表達式。 Oracle數據庫將在結果集的列標題中使用 這個別名。 AS關鍵字是 可選。該別名有效地重命名查詢的持續時間爲 的選擇列表項。 別名可以在order_by_clause生成使用 而不是其他條款在查詢

4

每標準的SQL:在任何特定的SELECT子句中的所有列計算「好像」他們都被並行計算(允許一些實施做恰恰說明)。

因此,你不能依賴於同SELECT條款中定義的另一列,因爲它的價值還沒有被計算。