Создайте переменную для хранения количества для DATEDIFF больше 3

#sql #variables #count #datediff

#sql #переменные #количество #datediff

Вопрос:

Это может быть действительно просто, и я, вероятно, переусердствовал. Я должен создать переменную, в которой хранится количество сотрудников, которые работают в компании более 3 лет.

Вот что я придумал, поскольку в исходной таблице не хранятся годы, а только столбец с датой найма.

 DECLARE @YearsEmployed int,
 @Plus3 int,
 @EmpCount int
 SET @YearsEmployed =   (SELECT DATEDIFF(YY,HireDate,GetDate())
    FROM employees)
 SET @Plus3 = @YearsEmployed > 3
 SET    @EmpCount = COUNT(@Plus3)

 SELECT @EmpCount
  

Я уже получил ошибку «Неправильный синтаксис рядом с ‘>'», и я не знаю, как поступить. Любая помощь будет высоко оценена.

Ответ №1:

Приведенный ниже запрос даст вам количество сотрудников, которые работают в компании более 3 лет:

        DECLARE @EmpCount int

       SET @EmpCount =   (SELECT count(DATEDIFF(YY,HireDate,GetDate()))
       FROM employees where DATEDIFF(YY,HireDate,GetDate()) > 3)

       SELECT @EmpCount
  

КОЛИЧЕСТВО и условие для выбора сотрудников, проработавших более 3 лет, могут быть включены в запрос и сохранены в переменной, а не использовать несколько переменных, а затем получать их количество.

Спасибо

Ответ №2:

Мне кажется, это простой запрос:

 select count(1)
from employees
where HireDate < dateadd(year, -3, getdate())
  

Обратите внимание, что я выбрал dateadd текущую дату, а не datediff выражение для значения столбца, поскольку последнее невозможно изменить.


Что касается написанного вами кода, ошибка возникает при попытке присвоить результат логического выражения ( @YearsEmployed > 3 ) переменной. Кроме того, запрос SET @YearsEmployed = ... завершится ошибкой, если в нем больше одной строки employees . Кроме того, я не верю COUNT() , что его можно использовать вне запроса, и даже если это возможно, это не принесет ничего полезного.