我创建了一个带有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
但是,在执行上述步骤时,我的代码没有运行。
有没有其他方法可以删除临时表使用,以及为什么我的方式不起作用。
请帮忙,
答案 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