Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 根据员工的入职日期,如何计算特定日期的可用员工总数?_Sql_Sql Server_Tsql_Date - Fatal编程技术网

Sql 根据员工的入职日期,如何计算特定日期的可用员工总数?

Sql 根据员工的入职日期,如何计算特定日期的可用员工总数?,sql,sql-server,tsql,date,Sql,Sql Server,Tsql,Date,我使用的是SQLServer2012,我的数据库中有一个名为Employee的表。 假设它只有3列,即EmpID,Dept,DateOfEntry,dateleft,那么将给出截至2017-05-31的员工计数的SQL查询语法是什么 表中的每一行代表一名员工 以下是Employee表的状态: EmpId Dept DateOfEntry DateLeft 100 F&B 2015-06-05 2016-01-02 125 Kitchen

我使用的是
SQLServer2012
,我的数据库中有一个名为
Employee
的表。 假设它只有3列,即
EmpID
Dept
DateOfEntry
dateleft
,那么将给出截至2017-05-31的员工计数的
SQL
查询语法是什么

表中的每一行代表一名员工

以下是
Employee
表的状态:

EmpId   Dept      DateOfEntry   DateLeft
100     F&B       2015-06-05    2016-01-02
125     Kitchen   2016-02-12    2016-03-10
151     Finance   2018-05-03    NULL
...

更新:对上表中缺少DateLeft列表示歉意。我已相应地更新了问题。

如果您想在一个日期内完成,请尝试以下操作:

select count(EmpID) from employee 
where DateOfEntry>='31-may-2017' and (dateleft is null or dateleft< getdate())
从员工中选择计数(EmpID)
其中DateOfEntry>='2017年5月31日'和(dateleft为null或dateleft
您可以计算截至该日期正在工作的员工,对吗?意味着他们应该在当天或之前进入:

select count(*)
from employees
where DateOfEntry <= '20170531' and 
      (dateLeft is null OR dateLeft >= '20170531');
选择计数(*)
来自员工
其中DateOfEntry='20170531');
注意:如果您不接受此人在其约会左侧工作,请将>=更改为>

选择count(*),部门来自员工,其中“2017年5月31日”>入境日期
select count(*),dept from employee where '31-may-2017'>DateOfEntry 
  and '31_-may-2017'<DateOfLeft  group by dept;

“2017年5月31日”看来OP不会发布他们的尝试

这是一个非常简单的查询,如果使用一点Google/Bing/Yahoo,您可能会发现如何使用带有大于(
)和小于(
=
或DateLeft为空);

您尝试过什么?显示您当前的查询尝试。考虑到他们没有休假日期,这是否意味着一旦他们加入,他们就永远不能离开?@Larnu我非常抱歉。是的,它确实有一个列来表示左日期!!我正在更新问题。你到底面临什么问题?由于既有输入日期也有退出日期,因此查询将非常简单。你写了什么疑问?为什么它对你不起作用?你仍然需要添加你已经尝试过的东西。您有足够的声誉,知道在提问时提供您尝试过的内容非常重要。使用OP的样本数据,结果将为0。这并没有给出一个基于OP描述的结果。在我看来,该表中的数据更多,因为。。。。。而且他的问题是在某个特定的日期,这就是为什么我用这种方式回答。虽然你已经更新了你的尝试,但这仍然不起作用。如果一名员工在
2000-01-01
加入,并且离开日期为
'2018-08-16'
的话,他将一直在
2017-05-31
工作,但是,您的查询会给他们打折扣。
GETDATE()
恐怕也不是正确答案。:)谢谢我错过了问题中的DateLeft一栏。我已相应地更新了问题。感谢更新您的答案。@user3115933,编辑了我的答案以将dateLeft考虑在内。虽然此代码可能(也可能不会)解决问题,但一个好的答案应该始终解释问题是如何解决的以及代码的作用。
DECLARE @Date date;
SET @Date = '20170531';

SELECT COUNT(*) AS Employees
FROM YourTable
WHERE DateOfEntry <= @Date
  AND (DateLeft > @Date --I assume that they are no longer emplyed on the day they leave, other use >=
   OR  DateLeft IS NULL);