7

我现在一直在尝试查找是否可以使用 select 语句中前面声明的别名,如果它可以在 Oracle SQL 的 case 语句中的 case 中使用。我发现的大多数结果都是关于如何根据案例陈述制作别名,这不是同一个问题。一个简单的例子是这样的:

Select TABLEA.SomeIDNumber AS "Id",
       case ID
          when 3
          then 'foo'
          else 'bar'
       end AS "Results"
FROM OMEGA.TABLEA

在我正在创建的 SQL 语句中,它真的没有那么简单(它实际上是基于以前的 case 语句创建的,并且需要在各种表上进行一些连接才能完成查询的所有其他部分,但如果不知道它就没有真正的意义更多我无法共享的数据库)。

我只是想知道是否可以稍后在 Oracle 的 select 语句中的 case 语句中使用别名(我知道这样的事情可以用 Access 有点“SQL”来完成)。还是对我进行一些修改以使其嵌套选择语句更好?应该是可以的,就是有点痛。

4

1 回答 1

10

不,您不能在同一级别的其他地方引用别名select,除了在order by子句中,因为当 Oracle 在内部分配它时。

从文档(强调添加):

您可以使用列别名 c_alias 来标记选择列表中紧接在前面的表达式,以便以新标题显示该列。别名在查询期间有效地重命名选择列表项。别名可以在 ORDER BY子句中使用,但不能在查询中的其他子句中使用

您需要使用内部查询,例如:

select "Id",
    case "Id"
        when 3
        then 'foo'
        else 'bar'
    end AS "Results"
from (
    select TABLEA.SomeIDNumber AS "Id",
    from TABLEA
);
于 2013-07-11T11:12:08.910 回答