0

我正在使用 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 和名字,但此查询仅返回当天处理订单的雇员 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,但你能告诉我伙计们我做错了什么吗

4

2 回答 2

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.

于 2012-12-12T19:53:01.377 回答
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')
于 2012-12-12T19:54:58.487 回答