Создайте переменную для хранения количества сотрудников, проработавших в компании более 3 лет. - PullRequest
1 голос
/ 07 августа 2020

Это то, что у меня есть.

DECLARE @EmployeeLengthAfterHire INT
SET @EmployeeLengthAfterHire = (
    SELECT  EmpID,DATEDIFF(YY,HireDate,GETDATE()) AS lengthofEmployYY
    FROM HospitalStaff
    GROUP BY HireDate, EmpID
    HAVING DATEDIFF(YY,HireDate,GETDATE()) > 3
)

SELECT  @EmployeeLengthAfterHire

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Я вижу, что вы пытаетесь присвоить 2 значения (EmpID и lengthofEmployYY) в объявленном параметре, который не поддерживается. Насколько я понимаю, вы можете попробовать следующий сценарий:

DECLARE @EmployeeLengthAfterHire INT
SET @EmployeeLengthAfterHire = (
    SELECT  COUNT(*)
    FROM HospitalStaff
    GROUP BY HireDate, EmpID
    HAVING DATEDIFF(YY,HireDate,GETDATE()) > 3
)

SELECT  @EmployeeLengthAfterHire
0 голосов
/ 07 августа 2020

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

Если вы хотите установить переменную для подсчета, у вас есть две проблемы:

  • Ваш подзапрос содержит более одного столбца.
  • Вероятно, ваш подзапрос возвращает более одной строки.

Вы можете использовать:

SET @EmployeeLengthAfterHire = (
     SELECT COUNT(*)
     FROM HospitalStaff
     WHERE DATEDIFF(YEAR, HireDate, GETDATE()) > 3
    )

Тем не менее, ваш запрос не с расчетом более 3 лет. Он вычисляет количество границ года между двумя датами. Таким образом, 2019-12-31 и 2020-01-01 будут с разницей в «1» на этот logi c.

Я бы порекомендовал:

SET @EmployeeLengthAfterHire = (
     SELECT COUNT(*)
     FROM HospitalStaff
     WHERE HireDate < DATEADD(YEAR, -3, HireDate)
    );

Я не конечно, почему вы назвали столбец «EmployeeLengthAfterHire».

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