使用来自Union All的结果集创建新列-SQL

时间:2019-05-15 21:18:27

标签: sql oracle union

我有两个分别带有PID和NAME列的简单视图。 它们是如何相互连接的。

View1:

PID NAME

Comp1,C1

Comp2,C2

View2:

PID NAME ParentPID

Pool1,P1,Comp1

Pool2,P2,Comp2

我想通过使用UNION ALL语句在下面的列中创建一个视图(我想这是最简单的方法)

PID,NAME,PID:NAME

Comp1,C1,C1

Comp2,C2,C2

Pool1,P1,C1:P1

Pool2,P2,C2:P2

如果我仅使用PID和NAME列,则union all语句将正常运行。例如:

SELECT comp.PID, comp.NAME

from View1 comp

UNION ALL

SELECT pool.PID, pool.NAME

from View2 pool;

但是当我尝试使用UNION ALL创建新列时,它失败,如下所示。

SELECT comp.PID, comp.NAME,comp.NAME as Comp_pool_NAME

from View1  comp

UNION ALL

SELECT pool.PID, pool.NAME, concat(comp.NAME||':',pool.NAME) as Comp_pool_NAME

from View2  pool;

1 个答案:

答案 0 :(得分:0)

UNION ALL中的两个查询彼此独立。您不能在另一个内部引用。看起来您想要的是:

all rows from View1
union all
all rows from View2 with a column from View1

因此在第二个查询中,您需要将view1和view2连接起来:

select pid, name, pid_name from view1
union all
select v2.pid, v2.name, v1.name || ':' || v2.name
  from view2 v2
 inner join view1 v1 on v1.pid = v2.pid