2013-01-07 64 views
0

我有两个表像插入值当空

学生:

roll Name 
1  A 
2  B 
3  C 

马克

roll Mark 
1  85 
3  95 

我要像

roll Name Grade 
1  A  A 
2  B  F 
3  C  A+ 
一输出

我已经试过此查询

select Stdent.Roll,Stdent.Name,Grade= case 
when (Mark between 0 and 79) then ('F') 
when (Mark between 80 and 89) then ('A') 
when (Mark between 90 and 100) then ('A+') end 
from Mark 
right join Stdent 
on Mark.roll=Stdent.Roll 
order by Stdent.Roll 

输出显示级列第二行空。但我希望它是F.

+0

我已经加入了空值SQL标记,但我不知道这是哪种方言。 –

回答

1
select Stdent.Roll,Stdent.Name,Grade= case 
when (func(Mark,0) between 0 and 79) then ('F') 
when (Mark between 80 and 89) then ('A') 
when (Mark between 90 and 100) then ('A+') end 
from Mark 
right join Stdent 
on Mark.roll=Stdent.Roll 
order by Stdent.Roll 

如果您正在使用sql server,如果oracle nvl,您应该使用ISNULL而不是func。请检查this页面。

0

您需要处理Mark在你的case语句是NULL

SELECT Student.Roll, 
     Student.Name, 
     Grade = CASE 
        WHEN Mark.Mark BETWEEN 0 AND 79 OR Mark.Mark IS NULL THEN 'F' 
        WHEN Mark.Mark BETWEEN 80 AND 89 THEN 'A' 
        WHEN Mark.Mark BETWEEN 90 AND 100 THEN 'A+' 
       END 
FROM Mark 
     RIGHT JOIN Student 
      ON Mark.roll=Student.Roll 
ORDER BY Student.Roll 
0

试试这个:

select Stdent.Roll,Stdent.Name,Grade= case 
when (IsNull(Mark, 0) between 0 and 79) then ('F') 
when (Mark between 80 and 89) then ('A') 
when (Mark between 90 and 100) then ('A+') end 
from Mark 
right join Stdent 
on Mark.roll=Stdent.Roll 
order by Stdent.Roll 
0
select Stdent.Roll,Stdent.Name,Grade= case 
when (NVL(Mark,0) between 0 and 79) then ('F') 
when (Mark between 80 and 89) then ('A') 
when (Mark between 90 and 100) then ('A+') end 
from Mark 
right join Stdent 
on Mark.roll=Stdent.Roll 
order by Stdent.Roll 

使用NVL函数来处理