我正在使用SQL Server 2012数据库并且我正在尝试检索所有员工ID'并且那些名字在2008年2月2日没有处理订单而我遇到了这样的问题
Select
Distinct E.empid, E.firstname
from
HR.Employees E
where
E.empid in (Select empid
From Sales.Orders As S
where orderdate <> '20080212')
此查询返回所有员工ID和名字,但此查询仅返回当天处理订单的雇佣人员
Select Distinct E.empid, E.firstname
from HR.Employees E
where E.empid in (Select empid
From Sales.Orders As S
where orderdate = '20080212')
我明白问题在于过滤orderdate
,但你能告诉我们我做错了吗
答案 0 :(得分:4)
问题在于你的逻辑。没有员工只在该日处理订单。您的第一个查询是让所有在该日期之前有订单的员工。
第一个查询的目的是:
Select Distinct E.empid, E.firstname
from HR.Employees E
where E.empid not in (Select empid
From Sales.Orders As S
where orderdate = '20080212')
您的第一个查询中的子查询将获得所有在2008-02-12之外的其他日期工作的员工。据推测,这就是所有员工。好吧,有人本可以在那天开始戒烟或被解雇,但事情没有发生。
您想要的是排除当天工作的所有员工。因此,您需要在子查询中使用“=”,然后使用not in
排除它们。
答案 1 :(得分:0)
我假设这是一个DataTime列而不是Date列。作为DateTime,您要求的是那些在一天之内没有接到订单的员工,而不是一整天。有很多变种来处理这个,但我会用的是
Select Distinct E.empid, E.firstname
from HR.Employees E
where E.empid in (Select empid
From Sales.Orders As S
where orderdate >= '20080212'
and
orderdate < '20080213')