0

私は 3 つのテーブルを持ってEmployeeProjectますAssignment。1 人の従業員を複数のプロジェクトに割り当てることができ、1 つのプロジェクトに複数の従業員を割り当てることができます。Assignmentテーブルは、従業員とプロジェクト間の多対多の関係を保持します。同時に複数のプロジェクトに取り組んだことのある従業員のリストを返す SQL サーバーの SQL クエリが必要です。

テーブルの構造

テーブル従業員

EmpId,
EmpName

テーブル プロジェクト

ProjId,ProjName,ProjStartDate,ProjEndDate

割り当て

AssignmentId,ProjId,EmpId,AssStartDate,AssEndDate
4

2 に答える 2

1
Select  EmpName,zt.* from
(
Select a.EmpId,Count(*) as cnt
from Assignment a 
Join Assignment b on a.EmpId=b.EmpId and a.ProjId<>b.ProjId
and 
(
(a.AssStartDate>=b.AssStartDate and a.AssStartDate<=b.AssEndDate) 
or 
(a.AssEndDate>=b.AssStartDate and a.AssEndDate<=b.AssEndDate) 
or
(b.AssStartDate>=a.AssStartDate and b.AssStartDate<=a.AssEndDate) 
or 
(b.AssEndDate>=a.AssStartDate and b.AssEndDate<=a.AssEndDate) 
)
Group by a.EmpId
Having Count(*)>1
) zt
join Employee e on e.EmpId=zt.EmpId
于 2012-12-21T07:31:35.173 に答える
0
Select a.EmpId from Assignment a join Assignment b on 
a.EmpId = b.EmpId 
and
a.AssStartDate < b.AssEndDate
and
a.AssEndDate > b.AssStartDate 
于 2012-12-21T07:36:21.797 に答える