【问题标题】:Getting Column does not exist Error when using SUBSTR function in derived column在派生列中使用 SUBSTR 函数时获取列不存在错误
【发布时间】:2020-08-19 07:13:21
【问题描述】:

我有两个名为“客户”和“合同”的表。

查询:

    Select 
   cu.A||cu.B||Co.C||Co.D as DUMMY,
    (SUBSTR(DUMMY,25,1) as NEND,
    SUBSTR(DUMMY,1,19) as MDATE
    from Customer Cu
    Left Outer Join Contract Co
    on Cu.A=Co.D

所以,当我运行这个查询时,会出现“DUMMY 列不存在”之类的错误

谁能帮我实现这个。

【问题讨论】:

  • 错误本身很明显没有虚拟列,所以请在SUBSTR中使用相同的列组合代替DUMMY。
  • 您的查询中有一个额外的左括号。

标签: sql oracle common-table-expression vertica


【解决方案1】:

DUMMY 是一个别名,因此不能像您所做的那样在同一个查询中引用它。

如果您想像这样使用DUMMY 别名,则必须将整个查询设为子查询。然后你可以使用substr 函数,像这样:

select dummy,
  substr(dummy,25,1) as nend,
  substr(dummy,1,19) as mdate
from (
  select
    cu.a||cu.b||co.c||co.d as dummy
  from customer cu left outer
    join contract co on cu.a = co.d
);

【讨论】:

    【解决方案2】:

    使用子查询或 CTE 的另一种方法是使用横向连接定义列:

    select s.DUMMY,
           SUBSTR(s.DUMMY, 25, 1) as NEND,
           SUBSTR(s.DUMMY, 1, 19) as MDATE
    from Customer Cu left join
         Contract Co
         on Cu.A = Co.D left join lateral
         (select cu.A || cu.B ||C o.C || Co.D as dummy
          from dual
         ) s
    

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 1970-01-01
      • 2021-06-21
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多