2011-01-18 2 views
0

Я хочу, чтобы показать «Pass», если знаки студента являются 33 или выше, и «нормально», если они меньше, чем 33.SQL запрос для сравнения

Моя таблица id,rollno,subject,marks то, что я хочу показать это

запись:

id rollno subject marks 
10 1253 english 67 

требуемый выход

id rollno subject marks status 
10 1253 english 67 Pass 
11 1247 computer 24 Fail 

плз скажите мне запрос

+0

который DB вы используете? –

+0

Как насчет того, когда они набрали 33 точно? – onedaywhen

+0

@oneday, когда будет пройден – TheVillageIdiot

ответ

1

для T-SQL (MSSQL):

SELECT id, rollno, subject, marks, 
     case when marks >=33 THEN 'Pass' 
      else 'Fail' 
     end [Status] 
FROM <TABLE NAME> 
+1

Почему примечание «для mysql»? Это использует только ANSI SQL92, который соответствует всем основным РСУБД, которые я знаю, за исключением части использования [] вокруг статуса – RichardTheKiwi

+0

+1 для информации @cyberwiki. Я не много работал с другими РСУБД. – TheVillageIdiot

0

общее решение:

select id, rollno, sbject, marks, 'Pass' as status from table_name where marks >= 33 
union 
select id, rollno, sbject, marks, 'Fail' as status from table_name where marks < 33 
+1

Может ли такая таблица быть проиндексирована в столбце меток? Это сканирует таблицу дважды, если индекс отсутствует. – RichardTheKiwi

+0

Да столбцы индексирующих меток - умная идея, особенно если есть огромное количество записей. – lweller

+0

Также почему бы не использовать Union All? – TheVillageIdiot

0

Это должно работать в Oracle DB -

SELECT id, 
    rollno, 
    subject, 
    mark, 
    (
    CASE 
    WHEN mark < 33 
    THEN 'FAIL' 
    ELSE 'PASS' 
    END) status 
FROM table_name; 
Смежные вопросы