Как получить сотрудников, которые заканчивают 5 лет в организации ежеквартально - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь получить сотрудников, которые закончили свои 5,10,15,20 и т. Д. Лет.Я хочу получать данные ежеквартально, поэтому я добавил инструкцию switch в выражении where

declare @CurrentDate date

set @CurrentDate=GETDATE() ;

select EmployeeID,FirstName+''+isnull(MiddleName,'')+''+LastName as EmployeeName,JoiningDate,DATEDIFF(year, isnull(JoiningDate,''),getdate()) Experience

 from HRIS.dbo.EmpMaster
 where 
 ActiveFlag=1 and
CASE
    WHEN  DATEPART(quarter, getdate()) =1 and month(JoiningDate) BETWEEN 1 and 3 then 1
    WHEN  DATEPART(quarter, getdate()) =2 and month(JoiningDate) BETWEEN 4 and 6 then 1
    WHEN  DATEPART(quarter, getdate()) =3 and month(JoiningDate) BETWEEN 7 and 9 then 1
    WHEN  DATEPART(quarter, getdate()) =4 and month(JoiningDate) BETWEEN 10 and 12 then 1
    else 0
    END
 and  DATEDIFF(year, isnull(JoiningDate,''),@CurrentDate)%5=0 and Year(JoiningDate)!=2019

Я получаю сообщение об ошибке, как показано ниже

Error: An expression of non-boolean type specified in a context where a condition is expected, near 'and'.

Я понял, что ошибка заключается в том, что случай вусловие where не возвращает логическое значение.

как записать регистр переключателя, чтобы он возвращал логическое значение

Заранее спасибо!

1 Ответ

0 голосов
/ 18 марта 2019

Хммм. , , почему бы не упростить это?

WHERE ActiveFlag = 1 AND
      DATEPART(quarter, getdate()) = DATEPART(quarter, JoiningDate)

Это кажется намного проще.

Ваша проблема будет исправлена ​​добавлением = 1 после END. Но я не рекомендую такой подход.

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