Использование SQL Server 2005
Выйти из таблицы
ID StartDate EndDate
001 04/01/2010 04/02/2010
002 04/02/2010 04/03/2010
…
Таблица событий
ID Date PresentDate Status
001 03/30/2010 03/30/2010 Present
001 03/31/2010 null absent
001 04/01/2010 null Leave
001 04/02/2010 null Leave
001 04/03/2010 null absent
001 04/04/2010 04/04/2010 Present
….
Все типы данных Datecolumn имеют дату и время
В столбце состояния, если текущая дата равна нулю, она будет отображаться как «отсутствующая», если не нулевая, то она будет отображаться как «присутствующая». Теперь, если мы применим отпуск к дате, он будет отображаться как «Оставить» в столбце статуса.
Запрос
Select
id, date, present date
, CASE WHEN t2.id IS NULL THEN t1.Status ELSE ‘Leave’ END AS status
from event table as t1
left outer join leave table as t2 on
t1.id = t2.id and t1.date between t2.startdate and t2.enddate
Вышеупомянутый метод работает, но мне нужно добавить еще одно условие.
Однажды, если мы применили отпуск для конкретного сотрудника в Таблице отпусков, он должен сравнить столбец «Текущая дата», если столбец «Текущая дата» пуст, то он должен отображаться как «отпуск»
Ожидаемый результат
ID Date PresentDate Status
001 03/30/2010 03/30/2010 Present
001 03/31/2010 null absent
001 04/01/2010 null Leave
001 04/02/2010 null Leave
001 04/03/2010 null Leave (Expect this value)
001 04/04/2010 04/04/2010 Present
….
Исходя из вышеприведенного вывода, Leave начинается с 01.04.2010 по 04.02.2010, затем следующий столбец текущей даты равен NULL, тогда статус должен отображаться как «Leave», если текущая дата не равна NULL, то должна отображается как «Настоящее время.
»
Метод
We can display as "Leave" in status column from Start Date to end date of leave table, after that leave date end then we can compare with PresentDate column, if PresentDate column is null then it should display as "Leave", once data is available in present column then status should display with normal condition.
Как сделать запрос для вышеуказанного условия.
Нужна помощь по запросу