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.分数 <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
老兄,问问题要问全。