将同一查询的两个不同的eows组合成一个

时间:2015-07-14 07:49:31

标签: sql oracle11g

我有一张类似于此的表

Id | student_name | grade_Sem_A | grade_sem_b

我需要得到下表作为结果

Student_name | grade | Semester

为此,我使用以下查询

select student_name, grade_sem_a as grade, 'A' as sem 
union all
select student_name, grade_sem_b as grade, 'B' as sem

问题是它查询完全相同的行两次,这是不必要的,而我使用的表有大量的行,并且这些查询中的每一个都需要很长时间才能打开,是否有办法准确获取相同的结果没有使用union all并且两次查询相同的数据?

1 个答案:

答案 0 :(得分:1)

我建议:

select student_name, grade_sem as grade, sem 
from your_table,
(
  select 'A' as sem from dual
  union all
  select 'B' as sem from dual
  ) t;

我的解释说明主表的访问权限已经完成一次。

希望它有所帮助。