Проблемы с поиском активных пользователей из-за даты найма / отставки - PullRequest
0 голосов
/ 31 марта 2020

В моей таблице Employee на сервере SQL у меня есть два столбца даты и времени: HiringDate и ResignDate. Я хочу создать новый столбец Status (активный, неактивный) в представлении.

  • Если HiringDate равен NULL или больше, чем сегодня = Неактивно
  • Если HiringDate активен, но ResignDate более ранний, чем сегодня, то статус также должен быть неактивным.

Нужно ли создавать какой-то вложенный случай, чтобы сделать эту работу, и мне также интересно, нужно ли мне преобразовывать его в формат даты, чтобы часть времени не учитывалась.

Был бы очень благодарен за помощь.

Вот то, что я пробовал до сих пор, но это не работает должным образом ...

CASE 
            WHEN CONVERT(DATE,HiringDate) IS NOT NULL 
            OR CONVERT(DATE,HiringDate) <= CONVERT(DATE,GETDATE()) 
            THEN 
                CASE 
                    WHEN CONVERT(DATE,ISNULL(ResignDate, CONVERT(DATE,'2099-12-30'))) <= CONVERT(DATE,GETDATE()) 
                    THEN 'Active'
                    ELSE 'Inactive'
                END 
            ELSE 'Inactive' 
        END as Status

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы можете попробовать ниже CASE logi c.

CASE WHEN HiringDate IS NULL THEN 'InActive'
     WHEN CAST(HiringDate AS DATE) > CAST(GETDATE() AS DATE) THEN 'InActive'
     WHEN HiringDate IS NOT NULL AND CAST(ResignDate AS DATE) < CAST(GETDATE() AS DATE) THEN 'InActive'
     ELSE 'Active'
     END As Status
1 голос
/ 31 марта 2020

Попробуйте это ниже объединить логи c в одном выражении CASE:

CASE 
    WHEN HiringDate IS NOT NULL 
        or HiringDate >= GETDATE()
        or ResignDate >= GETDATE() 
    THEN 'Active' 
    ELSE 'Inactive' 
END as Status

Можете ли вы попробовать с этим ниже новые логи c -

CASE 
    WHEN (
        CONVERT(DATE,HiringDate) IS NOT NULL 
        OR 
        CONVERT(DATE,HiringDate) <= CONVERT(DATE,GETDATE()
    )
    AND
    CONVERT(DATE,ISNULL(ResignDate, CONVERT(DATE,'2099-12-30'))) 
            <= CONVERT(DATE,GETDATE()) 
    THEN 'Active'

    ELSE 'Inactive' 
END as EmployeeStatus 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...