4. 有这样三个数据表: A表示学生表(学号,姓名,班级);B表示课程表(课程编号,课程名称); C表示成

4. 有这样三个数据表: A表示学生表(学号,姓名,班级);B表示课程表(课程编号,课程名称);
C表示成绩表(学号,课程编号,分数)。现问题如下要检索“计算机原理”这个课程成绩并将成绩划分成四个等级:低于60分者为“差”,大于或等于60而低于75分者为“中”,大于或等于75而低于85者为“良”,大于或等于85分者为优,其他情况判为“无成绩”。请写出它的SQL语句?

用这个肯定没问题

SELECT A.学号,A.姓名,A.班级
CASE WHEN t.分数 <60 THEN '差'
WHEN t.分数 <75 THEN '中'
WHEN t.分数 <85 THEN '良'
WHEN t.分数 >= 85 THEN '优'
ELSE '无成绩' END
FROM A
LEFT JOIN (SELECT C.学号, C.课程名称, C.分数
FROM C, B WHERE C.课程编号 = b.
AND B.课程名称 = '计算机原理') t
ON A.学号 = t.学号追问

还有没有其他的回答啊

追答

用这个答案是防止有些学生没有成绩。也可以用这个

SELECT A.学号,A.姓名,A.班级
CASE WHEN t.分数 = 85 THEN '优'
ELSE '无成绩' END
FROM A
LEFT JOIN (SELECT C.学号, C.课程名称, C.分数
FROM C
WHERE 课程编号 = (SELECT 课程编号
FROM B
WHERE 课程名称 = '计算机原理')
ON A.学号 = t.学号

是你语句出错还是?你什么数据库?

追问

oracle ,t是什么意思啊,我是新手,呵呵!

追答

上面追问回答那里WHERE 课程名称 = '计算机原理') t 少了一个t

t就是把前面的子查询的结果集作为一个新的表格来使用
比如
select a.*, t.id
from a, (select * from a where id < 5) t

此时的t代表的是select * from a where id < 5这样一个结果集。明白了么?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-24
老兄,问问题要问全。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网