这可能非常简单,我可能会过度思考它。我必须创建一个变量,用于存储在公司工作超过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
我已经收到“>'附近的错误语法”错误,我对如何继续进行了解释。任何帮助将不胜感激。
答案 0 :(得分:0)
对我来说似乎是一个简单的问题:
select count(1)
from employees
where HireDate < dateadd(year, -3, getdate())
注意我选择了dateadd
当前日期,而不是列值的datediff
表达式,因为后者不是SARGable。
就您编写的代码而言,错误来自于尝试将布尔表达式(@YearsEmployed > 3
)的结果分配给变量。此外,如果SET @YearsEmployed = ...
中有多行,则查询employees
将失败。另外,我不相信COUNT()
可以在查询之外使用 - 即使可以,也不会做任何有用的事情。
答案 1 :(得分:0)
以下查询将为您计算在公司工作超过3年的员工数量:
DECLARE @EmpCount int
SET @EmpCount = (SELECT count(DATEDIFF(YY,HireDate,GetDate()))
FROM employees where DATEDIFF(YY,HireDate,GetDate()) > 3)
SELECT @EmpCount
COUNT和挑选已经工作超过3年的员工的条件可以包含在查询中并存储在变量中,而不是使用多个变量然后计算这些变量。
由于