0

私は次のように従業員とそのスケジュールの表を持っています:

Emp_Name | Date
--------  -----
Smith    | 08-01-2009
Jones    | 08-01-2009
Goodman  | 08-02-2009
Smith    | 08-02-2009
Jones    | 08-02-2009
Goodman  | 08-03-2009

結果が作業中の従業員の従業員名とだけになるようにクエリを作成するにはどうすればよいです08-02-200908-03-2009

どちらか一方の名前を取得する方法しか考えられないので、私は巻き込まれていますが、複数の検索条件のすべてに一致する名前だけの結果を取得する正しい方法を見つけることができないようです。行。

したがって、例の条件に基づいて、Goodmanのみを取得する必要があります。しかし、私がグッドマンとスミスとジョーンズを取得するようなクエリを実行するWHERE Date IS (list of dates)と、スミスとジョーンズは両方とも2009年8月2日に動作するためです。ある種のJOINを実行しようとすると、各従業員の作業日数が変動するため、必ずしも同じ列になるとは限りません。

ユニオンが行く道かもしれないと思ったが、誰かがどのように条件を探していたのかをいつも知っているとは限らなかった。

4

2 に答える 2

2

ここに私の最初の刺し傷がありますが、おそらく HAVING を使用するよりも効率的な方法があります...

SELECT Emp_Name,COUNT(DISTINCT date) as daycount 
FROM employee 
WHERE date IN ('08-01-2009', '08-02-2009')
GROUP BY Emp_Name
HAVING daycount=2 
于 2009-08-16T10:59:03.730 に答える
0

一般的なソリューションが必要ない場合は、これを使用できます。

select Emp_Name
from employee
where Emp_Name
  in (select Emp_Name from employee where Date = '08-02-2009')
  and in (select Emp_Name from employee where Date = '08-03-2009')
  ...
于 2009-08-16T11:10:07.900 に答える