【问题标题】:Using Alias In When Portion of a Case Statement in Oracle SQL在 Oracle SQL 中的 Case 语句的部分中使用别名
【发布时间】:2013-07-09 15:01:54
【问题描述】:

我一直在尝试查找是否可以使用前面在 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 选择语句中的 case 语句中使用别名(我知道可以使用 Access 有点“SQL”来完成这些事情)。还是对我进行一些修改以使其嵌套选择语句更好?可能是可行的,只是有点痛苦。

【问题讨论】:

    标签: sql oracle case alias


    【解决方案1】:

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

    From the documentation(强调):

    您可以使用列别名 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
    );
    

    【讨论】:

    • 啊,哦,好吧,我想我必须这样做。这将使这个 SQL 查询变得有趣,哈哈。谢谢。
    • 应该跟进,如果情况是调用另一个表用作嵌套选择内的连接,您是否必须在顶部选择上进行另一个连接,或者您可以从表中调用信息在内部选择?从来没有做过这样的选择(维护不善的数据库让我觉得这很荒谬:/)
    • @TheGodEmperor - 呃,我不太确定我是否跟随。您在内部选择中直接引用外部表中的表,因为您只是在使用结果集;你需要在外层加入一个新的连接。但通常我会尝试在外部选择中公开我需要的连接表中的任何值,方法是将它们包含在内部查询的选择列表中;它们不必出现在外部查询的选择列表中,但仍然可以被引用。可能存在阻止这种情况的问题,这取决于实际查询。
    猜你喜欢
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多