Я написал SQL-запрос, чтобы получить количество нанятых сотрудников в период с 2006 по 2008 год. вот мой код из таблицы adventurework2014.dimemployee
SELECT YEAR(cast('HireDate' as int)), DepartmentName,
count(ParentEmployeeKey) AS 'total emplyee join'
FROM DimEmployee
where HireDate between 2006 and 2008
group by DepartmentName, HireDate,FirstName,ParentEmployeeKey
ORDER BY YEAR(HireDate)
мой приведенный выше код показывает ошибку
Operand type clash: date is incompatible with smallint
пожалуйста, помогите мне с некоторым решением.
Вы пропустили использование year()
в предложении where
:
where year(HireDate) >= 2006 and year(HireDate) <= 2008
Кроме того, вам также не нужно использовать функцию cast()
с year()
, поскольку она будет возвращать числовой тип.
Ваш оператор SELECT
для меня странен, он должен иметь агрегированный столбец, когда вы включаете GROUP BY
:
SELECT YEAR(HireDate), DepartmentName,
count(ParentEmployeeKey) AS 'total emplyee join'
FROM DimEmployee
WHERE year(HireDate) >= 2006 and year(HireDate) <= 2008
GROUP BY DepartmentName, YEAR(HireDate), FirstName, ParentEmployeeKey
ORDER BY YEAR(HireDate);
Ниже оператор примет HireDate
как строку, которую нельзя преобразовать в int.
cast('HireDate' as int)
В идеале вам не нужно преобразовывать его в int, если вы используете YEAR
на дату, он даст вам только int.
Измените свой запрос следующим образом.
SELECT YEAR(HireDate), DepartmentName,
count(ParentEmployeeKey) AS 'total emplyee join'
FROM DimEmployee
where YEAR(HireDate) >= 2006 and YEAR(HireDate) <= 2008
group by DepartmentName, HireDate,FirstName,ParentEmployeeKey
ORDER BY YEAR(HireDate)
идеально сейчас. Я узнал очень важную вещь о функции года и функции приведения. Благодарность
Пожалуйста, попробуйте ниже,
SELECT YEAR(cast(HireDate as date)), DepartmentName,
count(ParentEmployeeKey) AS 'total emplyee join'
FROM DimEmployee
where YEAR(cast(HireDate as date)) between 2006 and 2008
group by DepartmentName, HireDate,FirstName,ParentEmployeeKey
ORDER BY YEAR(cast(HireDate as date))
Если ваш столбец «HireDate» является полем даты и времени, вам не нужно приведение
Я думаю, что также следует избегать приведения к типу найма