получить столбец таблицы в случае, если оператор else в pl sql - PullRequest
0 голосов
/ 19 февраля 2019

Запрос корректно выбирает student_id в состоянии TRUE, но не получает (max(gr_number)+1) в другом состоянии.Ниже мой запрос, пожалуйста, помогите мне.

 Select case when count(*) > 0 then student_id else (max(gr_number)+1) end student_id
 from student 
 where student_name ='faizan ahmed' 
 and email_id='abc@gmail.com' 
 and UPPER(student_dob)=UPPER('01-FEB-19') 
 and  rownum = 1 
 group by student_id, gr_number  ;

Он возвращает ноль в другом состоянии.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Условие FALSE - это когда count() не больше нуля.Так что ЛОЖЬ, когда записей не найдено .Следовательно, NULL - это правильный результат, потому что gr_number равно нулю (записей не найдено), поэтому max(gr_number) равно нулю, а max(gr_number)+1 равно нулю.

Не уверен, что вы пытаетесь достичь, но вот одно решение, которое вернет значение, если вы не найдете конкретного учащегося:

Select coalesce(s.student_id, g.gr_number+1) as student_id
from (select 1 as rn, max(gr_number) as gr_number
      from student ) g
left outer join
      ( select rownum as rn, student_id
        from student
        where student_name ='faizan ahmed' 
        and email_id='abc@gmail.com' 
        and UPPER(student_dob)=UPPER('01-FEB-19') 
        and  rownum = 1 ) s
 on s.rn = g.rn
  ;
0 голосов
/ 19 февраля 2019

Если вы пытаетесь получить максимальное значение gr_number на одного учащегося, вам не следует группировать его только по идентификатору студента:

group by student_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...