【发布时间】:2017-02-13 01:16:38
【问题描述】:
我无法对两个表之间的联接结果进行反透视。这两个表定义为:
create table scores_jan (
id number
, test_1 number
, test_2 number
, test_3 number
);
create table scores_feb (
id number
, test_1 number
, test_2 number
, test_3 number
);
insert into scores_jan values (1, 50, 60, 70);
insert into scores_feb values (1, 55, 65, 75);
commit;
我想对此进行反透视,为每个 ID/测试组合获取一行,以实现结果:
ID TEST_NUMBER JAN_SCORE FEB_SCORE
1 test_1 50 55
1 test_2 60 65
1 test_3 70 75
如果我在未指定我感兴趣的列的情况下编写 unpivot,它看起来像这样:
select *
from scores_jan j
join scores_feb f
on j.id = f.id
unpivot ( (jan_score, feb_score) for test_name in ( (test_1, test_1) as 'test_1'
, (test_2, test_2) as 'test_2'
, (test_3, test_3) as 'test_3'
)
)
这会产生错误 ORA-00918: column ambiguously defined
如果我尝试通过指定要使用的列来编写它,它看起来像这样:
select *
from scores_jan j
join scores_feb f
on j.id = f.id
unpivot ( (jan_score, feb_score) for test_name in ( (j.test_1, f.test_1) as 'test_1'
, (j.test_2, f.test_2) as 'test_2'
, (j.test_3, f.test_3) as 'test_3'
)
)
这会产生错误 ORA-01748: only simple column names allowed here
有没有办法让这个 unpivot 工作?我可以将其中一个表放入子查询中,但仅使用子查询来更改列的别名似乎不太理想。
【问题讨论】:
-
编辑您的问题并显示您想要达到的结果。
-
@GordonLinoff 已添加预期结果。
-
@spielchecker - 您使用的是哪个版本的 Oracle?
-
@GordonLinoff oracle12c