SQL запрос, Case

Добрый день!
Не могу корректно написать запрос
c Case не очень дружу

Case WHEN Data between DateS and DateE 
            THEN Case WHEN HoursD is not null THEN 'Д'   
			when HoursN = 1 then 'Н'
			when HoursR is not null then 'Р' end
			else Case WHEN Holiday = 0 THEN 'В' END  
		END

Должно быть: если HoursD is not null тогда ‘Д’ , иначе если HoursN = 1 тогда Н, иначе если HoursR is not null тогда ‘Р’ ИНАЧЕ 'В

Так а выдает что?

И Case с проверкой одного значения как

наверно проще заменить на if.

1 лайк

Подозреваю что так:

CASE WHEN NOT Data between DateS and DateE THEN 'В'
     WHEN HoursD is not null THEN 'Д'
     when HoursN = 1 then 'Н'
     when HoursR is not null then 'Р'
     else 'В' END
1 лайк

Исправила, не учла еще один else
У меня еще один вопрос
Как я могу сразу посчитать сумму HoursR, между выбранными датами

Открыть справочку по твоей СУБД, найти где там функции даты-времени, подобрать нужную. Легко, правда? И так по большинству вопросов по sql, и не только. Точно быстрей чем ждать с моря погоды на форуме ))

1 лайк

Так тут же вроде почти оно и есть?
Только условие про даты засунуть в WHERE, и добавить SUM.

image

Не получается вывести Sum
Например, диапазон с 06-02-2021 - 10-02-2020 Sum = 45

Буду пользоваться советом) Спсибо)

Так а что в коде-то?)

select Sum (HoursR)
      from T
	  where  A.Data between DateS and DateE
	  group by IdStudents
    )
  ) as SUMHoursR

Выводит
image

А что не так, что должно получиться?)

@Nadya, вы в запросе указали, что данные нужно сгруппировать (разбить на группы) по IdStudents (ну, не зная структуры, рискну предположить, что IdStudents в данном случае - это код студента, таким образом, Вы считаете сумму часов по каждому студенту отдельно).
Если нужно найти сумму всех часов по всем студентам в заданном интервале, то достаточно выкинуть строчку с group by …

P.S. очень рекомендую ознакомиться с книжкой Мартин Грубер (он же Мартин Грабер) “Понимание SQL”
(например, отсюда можно взять PDF:

Это Азбука SQL запросов. Очень полезно.

Спасибо, прочитаю)
В итоге решила не запросом выводить, а в Delphi считать

почему, позвольте спросить, Вы приняли такое решение?
чем

select Sum (HoursR)   from T
	  where  Data between DateS and DateE

не устроил?