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

これはDate列ではなくDataTime列であると想定します。DateTimeとして、1日ではなく、ある瞬間に注文を受け取らなかった従業員を求めています。これを処理するための多くのバリエーションがありますが、私が使用するのは

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 に答える