0

次のような2つのテーブルがあります

学生:

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

出力の成績列の 2 行目に null が表示されます。でもFにしたい。

4

4 に答える 4

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 を使用している場合は func の代わりに ISNULL を使用する必要があります。その他はこちらのページをご覧ください。

于 2013-01-07T11:35:28.893 に答える
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関数を使用してnull値を処理する

于 2013-01-07T11:52:56.307 に答える
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
于 2013-01-07T11:37:50.467 に答える
0

case ステートメントに含まれてMarkいることを処理する必要があります。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
于 2013-01-07T11:37:22.327 に答える