從您的模式,似乎在Employee
的managerID
列都將填充經理對於員工的ID。這可以解釋爲什麼當添加firstName
和lastName
時,報告變得很瘋狂,因爲您將按員工姓名而非經理人進行分組。
沒有看到表格內容很難說,但你可能會認爲不是有managerID
填充。
如果是這樣的話,你可以寫這樣的查詢
select e.EmployeeID, c.firstName, e.lastName, count(distinct edh.DepartmentID)
from Employee e
join Contact c
on e.ContactID = c.ContactID
join Employee e2
on e1.EmployeeID = e2.ManagerID
join EmployeeDepartmentHistory edh
on e2.EmployeeID = edh.EmployeeID
where e.ManagerID is null and edh.EndDate is null
group by e.EmployeeID, c.firstName, e.lastName
Employee
表的第一個實例是管理者(因爲你設置where e.ManagerID is null
),連接與Contact
讓你的經理的名字,Employee
的第二個實例可讓您獲得由每位經理管理的所有人員,並且加入EmployeeDepartmentHistory
可讓您獲得他們的部門(您指望)和他們的EndDate
,這必須是null
以確保他們目前處於就業狀態。
編輯
請注意我寫的連接方式;把它們寫成你的from
子句中的逗號分隔表名,中的連接條件是a bad habit that should be kicked,因爲它使得閱讀,維護和更改它們更加困難。這就是爲什麼join
在SQL語言於1992年
(一)如何你能認識一個經理嗎? –
(b)經理必須當前被佔用,您沒有在查詢中添加此項。 –
如果managerID中有值,則表示他/她是經理 – Obi