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,而不是缩写。它使您的代码更具可读性——特别是当您使用一些空格而不是将所有内容都塞满在一起时。