如何只为有通过分数的学生找到排名?

时间:2015-06-05 06:30:22

标签: sql sql-server sql-server-2008

我在一个数据库表中有学生标记,例如

studid, studname, m1, m2, m3

和学生'个人信息在另一个数据库表中,如

studid, studname.
  • 我想加入两个表来获得studid,studname,((m1,m2,m3)必须总和为' total')。

    学生&#39;如果m1,m2,m3 <40则必须显示结果,否则通过。

  • 我也想只为那些有通过分数的学生显示等级。

3 个答案:

答案 0 :(得分:0)

select ID, Name, CASE WHEN total > 40 THEN 'Pass' ELSE 'fail' end from 
(select m.studid as ID, m.studname as Name, sum(m1)+sum(m2)+sum(m3) as total from marks m NATURAL JOIN info i group by studid,studname )

答案 1 :(得分:0)

试试这个,

select studID, Studname, m1, m2, m3, (m1+ m2+ m3) as 'Total', 
    case 
        when(m1<40 OR m2<40 OR m3<40) 
        then 'FAIL' 
        else 'PASS' 
    end as 'Result'

它应该有用。你可以加入2个表来产生欲望的结果

答案 2 :(得分:0)

您可以将DENSE_RANK()CASE这样使用。

SELECT studid, studname,(m1 + m2 + m3) as Totalmarks,
CASE WHEN (m1 >= 40 AND m2 >= 40 AND m3 >= 40) THEN 'PASS' ELSE 'FAIL' END,
CASE WHEN (m1 >= 40 AND m2 >= 40 AND m3 >= 40) THEN DENSE_RANK()OVER(ORDER BY (m1 + m2 + m3) DESC) ELSE NULL END std_rank
FROM studentmarks
WHERE m1 >= 40 AND m2 >= 40 AND m3 >= 40

修改

如果您想要显示所有学生,请删除WHERE条款