#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()
, что его можно использовать вне запроса, и даже если это возможно, это не принесет ничего полезного.