2013-01-07 65 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函數來處理