在同一选择中使用列别名

时间:2016-01-06 15:32:55

标签: sql oracle

如何在同一查询中的其他位置使用列别名?是否可以在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 .....

2 个答案:

答案 0 :(得分:4)

每个标准SQL:任何特定SELECT子句中的所有列都被计算为“好像”它们都是并行计算的(以允许某些实现正确地执行)。

因此,您不能依赖于在同一SELECT子句中定义的另一列,因为它的值尚未计算。

答案 1 :(得分:3)

如果您查看documentation,您将看到您只能在STATIC MY_DATA Data1; void func1( ){ //modify Data1 func2(Data1); } void func2 (MY_DATA data){ // modify data } 子句中使用它:

  

指定列表达式的别名。 Oracle数据库将使用   结果集的列标题中的此别名。 AS关键字是   可选的。别名有效地重命名了选择列表项   查询的持续时间。 别名可以在order_by_clause中使用   但查询中没有其他条款