如何使用在Oracle中加入选择

时间:2016-08-11 10:49:39

标签: oracle

我创建了一个带有pivot的临时表,如下所示:

INSERT into A_temp_table(PER_KEY, LANDLINE, FAX, MOBILE)
    select * from
    (select PER_KEY, TEL_NUM, from ABC.V_PER_TEL) 
    pivot(max(TEL_NUM) for TEL_TYPE_DESC in ('LANDLINE', 'FAX', 'MOBILE'));

在此之后,我使用如下连接获取数据:

SELECT P.PERSON_KEY,
      P.FIRST_NAME,
      P.MIDDLE_NAME,
      P.LAST_NAME,
      PT.LANDLINE,
      PT.FAX,
      PT.MOBILE,

FROM ABC.V_PER P

    LEFT OUTER JOIN A_temp_table PT ON P.PER_KEY=PT.PER_KEY

我的问题是:

我可以直接用select语句替换join中使用的临时表吗? 如下所示:

SELECT P.PERSON_KEY,
      P.FIRST_NAME,
      P.MIDDLE_NAME,
      P.LAST_NAME,
      PT.LANDLINE,
      PT.FAX,
      PT.MOBILE,

FROM ABC.V_PER P

    LEFT OUTER JOIN (select * from
    (select PER_KEY, TEL_NUM, from ABC.V_PER_TEL) 
    pivot(max(TEL_NUM) for TEL_TYPE_DESC in ('LANDLINE', 'FAX', 'MOBILE'))) PT  ON P.PER_KEY=PT.PER_KEY

但是,在执行上述步骤时,我的代码没有运行。

有没有其他方法可以删除临时表使用,以及为什么我的方式不起作用。

请帮忙,

1 个答案:

答案 0 :(得分:0)

问题是您需要为PIVOT中的列使用别名;例如:

create table testPivot(v varchar2(10), n number);
insert into testPivot values ('A', 10);
insert into testPivot values ('A', 10);
insert into testPivot values ('B', 10);

这会产生错误:

SQL> select A
  2  from (
  3        select *
  4        from testPivot
  5        pivot(max(n) for v in ('A', 'B'))
  6        );
select A
       *
ERROR at line 1:
ORA-00904: "A": invalid identifier

这将有效:

SQL> select A
  2  from (
  3        select *
  4        from testPivot
  5        pivot(max(n) for v in ('A' as A, 'B' as B))
  6        );

         A
----------
        10