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

解决方案 »

  1.   

    select 
        A.姓名,A,班级,
        case when C.分数 is null then '无成绩'
             when C.分数>=85 then '优'
             when C.分数>=75 then '良'
             when C.分数>=60 then '中'
             else '差'
        end as 成绩
    from
        A
    cross join
        (select 课程编号 from B where 课程名称='计算机原理') D
    left join
        C
    on
        A.学号=C.学号 and D.课程编号=C.课程编号
      

  2.   

    SELECT a.姓名,b.课程名称,c.分数,
    级别=
    ISNULL(SELECT TOP 1 级别 FROM 
    (
    SELECT 0 分数,'差' 级别
    UNION SELECT 60,'中'
    UNION SELECT 75,'良'
    UNION SELECT 85,'优'
    ) g
    WHERE g.分数<=c.分数
    ORDER BY g.分数 DESC
    ),'无成绩')

    FROM a
    INNER JOIN c ON a.学号=a.学号
    INNER JOIN b ON c.课程编号=b.谭程编号