Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建一个变量来存储在公司工作超过3年的员工数量_Sql_Sql Server - Fatal编程技术网

Sql 创建一个变量来存储在公司工作超过3年的员工数量

Sql 创建一个变量来存储在公司工作超过3年的员工数量,sql,sql-server,Sql,Sql Server,这就是我目前所拥有的 DECLARE @EmployeeLengthAfterHire INT SET @EmployeeLengthAfterHire = ( SELECT EmpID,DATEDIFF(YY,HireDate,GETDATE()) AS lengthofEmployYY FROM HospitalStaff GROUP BY HireDate, EmpID HAVING DATEDIFF(YY,HireDate,GETDATE()) >

这就是我目前所拥有的

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个值EmpID和lengthofEmployYY,这是不受支持的。根据我的理解,你可以尝试下面的脚本-

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

SELECT  @EmployeeLengthAfterHire
创建一个变量来存储在公司工作超过3年的员工数量

如果要将变量设置为计数,则存在两个问题:

子查询有多个列。 子查询可能返回多行。 您可以使用:

SET @EmployeeLengthAfterHire = (
     SELECT COUNT(*)
     FROM HospitalStaff
     WHERE DATEDIFF(YEAR, HireDate, GETDATE()) > 3
    )
也就是说,您的查询计算的时间不超过3年。它正在计算两个日期之间的年边界数。因此,按照这种逻辑,2019-12-31和2020-01-01将相隔1年

我建议:

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

我不知道您为什么将列EmployeeLengthAfterHire命名。

所以对于标量变量,我需要在select语句中指定一个参数?这样就产生了一个单行和一列?是的,标量变量可以保存一个单行和一列的单值。请接受答案,如果它真的对@Bali:@Bali有帮助,请投赞成票。您接受了这个答案,它返回的错误与原始查询一样:。@gordon我没有交叉检查他的查询,因为这里没有样本数据。您指导我指出错误以及如何更改查询的最佳选项。但是你接受了我的回答,就像op做的一样,op已经提到指导方针为他/她做了工作。您显然遇到了一个错误,但既没有提到这个非常重要的事实,也没有包含错误消息。并建议您使用完整的datepart,而不是缩写。它使您的代码更具可读性——特别是当您使用一些空格而不是将所有内容都塞满在一起时。