Sql 在派生列中使用SUBSTR函数时,获取列不存在错误

Sql 在派生列中使用SUBSTR函数时,获取列不存在错误,sql,oracle,common-table-expression,vertica,Sql,Oracle,Common Table Expression,Vertica,我有两个名为“客户”和“合同”的表格 查询: 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 所以,当我运行这个查询时,我得到了类似“虚拟列不存在”这样的错误 任何人都可以帮助我如

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

查询:

    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
所以,当我运行这个查询时,我得到了类似“虚拟列不存在”这样的错误


任何人都可以帮助我如何实现这一点。

虚拟是一个别名,因此不能在与您相同的查询中引用它

如果您想像那样使用
别名,那么必须将整个查询作为子查询。然后可以使用
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
);

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
);

使用子查询或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

使用子查询或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

错误本身非常清楚没有伪列,因此请在SUBSTR中使用相同的列组合来代替伪列。查询中有一个额外的左括号。错误本身非常清楚没有伪列,所以请在SUBSTR中使用相同的列组合来代替伪列。您的查询中有一个额外的圆括号。