在同一选择中使用列别名[重复]

Posted

技术标签:

【中文标题】在同一选择中使用列别名[重复]【英文标题】:Use column alias in same select [duplicate] 【发布时间】:2016-01-06 15:32:54 【问题描述】:

如何在同一查询的其他地方使用列别名?甲骨文可以吗?

使用 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 .....

【问题讨论】:

不,你不能,除非你有一个带有别名列的子查询 你肯定可以在order by子句中使用它。 Using Alias In When Portion of a Case Statement in Oracle SQL(和许多其他人)的可能重复 【参考方案1】:

根据标准 SQL:任何特定 SELECT 子句中的所有列都“好像”被计算为并行计算(以允许某些实现精确地做到这一点)。

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

【讨论】:

【参考方案2】:

如果你检查documentation,你会看到你只被允许在order by子句中使用它:

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

【讨论】:

以上是关于在同一选择中使用列别名[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift - 横向列别名参考

嵌套选择的内部连接 ​​- 多次使用同一列时

GraphQL 列别名 [重复]

pyspark:使用别名选择列

具有别名的同一列上的多个连接

在 SQL 视图中的列选择中使用左连接别名