Oracle怎么按不同条件查询得到两个不同的列,并且生成作为同一个表的两列?

比如
新增表Credits(SNO,SumCredit,NoPass),表示每学生已通过选修课程的合计学分数,以及不及格的课程数。
合计学分数和不及格课程数的条件不一样,怎么查询?
Create table Credits as
(
(SELECT SNO FROM SC) NATURAL JOIN
(SELECT SNO,SUM(CREDIT) SUMCREDIT FROM SC NATURAL JOIN COURSES WHERE SC.GRADE>59) natural join
(SELECT SNO, COUNT(CNO) NOPASS FROM SC NATURAL JOIN COURSES WHERE SC.GRADE<60)
);
我用这样的连接查询也不行,Oracle说

(SELECT SNO FROM SC) NATURAL JOIN
这一句的Natural的N这里缺失右括号

可以写成两个子查询,然后用外连接把两个子查询相同的字段连接起来。追问

我就是不想用连接,想知道有没有别的方法

追答

外连接应该是必须的,因为你查询到的学号,有些只在第一个子查询中出现,有些只在第二个子查询中出现。
select a.sno, b.sumcredit, c.nopass from

(SELECT SNO FROM SC) a,
(SELECT SNO,SUM(CREDIT) SUMCREDIT FROM SC NATURAL JOIN COURSES WHERE SC.GRADE>59) b,
(SELECT SNO, COUNT(CNO) NOPASS FROM SC NATURAL JOIN COURSES WHERE SC.GRADE<60) c
where a.sno = b.sno (+)

and a.sno = c.sno (+)

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-05-24
你是要在一行上显示两个结果吗?还是每个人只能有这两种情况中的一种追问

求详细点的语句

第2个回答  2020-11-16
同问,我用 LEFT JOIN将两个子查询链接了,同求跟简洁的方法
相似回答