0

如何編寫SQL查詢聘用過的員工和部門表

employees table(id,f_name,l_name,salary,dept_id,manager_id) 

departments table(id,dept_name,manager_id) 

我想告訴dept_name,其manager_id,經理的l_name和相應的管理下工作在單臺員工數量。

+0

你嘗試過什麼,也正確標記的問題,DB是你想運行鍼對此查詢有哪些? – Satya

+0

我們如何判斷某人是否是經理姓氏部門的經理?我沒有在部門中看到經理姓名列,也沒有在員工中看到職位列, –

+0

您可以提供一些示例數據,以便我可以測試我的查詢嗎? –

回答

0

您可以通過一個簡單的查詢來完成此操作,但是您應該刪除employees表中的manager_id,並使用員工記錄ID作爲標識符。

Select dept.dept_name, dept.manager_id, (select e.l_name from employees as e where e.id = dept.manager_id), count(select em.id from employees as em where dept.id = em.dept_id) FROM departments as dept 

這應該工作,但是,你沒有提供你正在使用的特定分貝。如果你更新你的問題或告訴什麼數據庫,我可以編輯該數據庫,如果它不工作。

0

入住這

select d.deptname, d.managerid, e.fname, (select COUNT(*) 
              from employees 
              where managerid = d.managerid and 
              managerid <> id and 
              depid = d.id 
              group by managerid) NoofEmps 
from departments d join employees e on d.managerid = e.id 

字段名稱可能是因爲你所提到的不完全相同。

2

嘗試這種情況:

SELECT dept.dept_name, dept.manager_id, emp.l_name, emp_count.empcount 
FROM departments AS dept 
INNER JOIN (SELECT COUNT(*) AS empcount, manager_id FROM employees GROUP BY manager_id) AS emp_count ON dept.manager_id = emp_count.manager_id 
INNER JOIN employees AS emp ON dept.manager_id = emp.id 

OR此:

SELECT dept.dept_name, dept.manager_id, emp.l_name, emp_count.empcount 
FROM departments AS dept 
INNER JOIN (SELECT COUNT(*) AS empcount, dept_id FROM employees GROUP BY manager_id) AS emp_count ON dept.dept_id = emp_count.dept_id 
INNER JOIN employees AS emp ON dept.manager_id = emp.id 

的第一一個是引用MANAGER_ID而第二個是,以引用的dept_id。兩者都可以有相同的結果。我通過爲員工數創建子查詢並將其鏈接到部門來實現此目的。

這是SQL Server 2008 Fiddle

+0

'(SELECT COUNT(*)AS empcount,dept_id FROM employees GROUP BY manager_id)''這可能會降低性能。因此sql server爲這個選擇創建臨時存儲。 – Nithesh

+0

是的,但我沒有說這是唯一的方法。 –

+0

我認爲'相關的子查詢'在這種情況下提供了更好的性能..我是否正確? – Nithesh

0

你可以通過這個correlated subquery來獲得計數。其餘的你可以選擇使用連接。這可能會幫助你

SELECT D.dept_name, 
      D.manager_id, 
      E.l_name, 
      (SELECT COUNT(*) 
        FROM employees 
        WHERE manager_id=D.manager_id) AS numberOfEmployees 
FROM departments D INNER JOIN employees E ON D.manager_id=E.id 
-1

這裏是另一個解決方案,您可以考慮

SELECT D.dept_name as [Department Name], 
E.manager_id as [Manager ID], 
E.l_name as [Last Name], 
(SELECT COUNT(*) FROM employees EM WHERE EM.manager_id = E.id) as [Employee Count] 
FROM departments D 
INNER JOIN employees E on D.manager_id = E.manager_id 
+0

-1複製後 – 2013-07-11 09:41:20