2011-05-25 153 views
0

(DepartID,DepName)子查詢問題

員工(名稱,DepartID)

我需要的是員工與DepName系計數。

回答

1

如果您正在使用SQL Server版本或以上,這裏是另一個可能的方式讓員工按部門計數。 。

SELECT  DPT.DepName 
     , EMP.EmpCount 
FROM  dbo.Department DPT 
CROSS APPLY (
       SELECT COUNT(EMP.DepartId) AS EmpCount 
       FROM dbo.Employees EMP 
       WHERE EMP.DepartId = DPT.DepartId 
      ) EMP   
ORDER BY DPT.DepName 

希望有所幫助。

樣品測試查詢輸出:

Output

1

我會使用outer join而不是子查詢。

SELECT d.DepName, COUNT(e.Name) 
FROM Department d 
LEFT JOIN Employees e ON e.DepartID = d.DepartID 
GROUP BY d.DepartID, d.DepName 
+0

子查詢較好,避免了排序上DepName – Magnus 2011-05-25 18:11:37

+0

@Magnus機會是'DepartID'將是PK /聚簇索引鍵,也不會需要任何形式。編輯:這是一個警察的答案,雖然有趣的一般點我會做一些測試。 – 2011-05-25 18:17:55

+0

我想,既然你是由DepartID和DepName分組而不是隻有DepName – Magnus 2011-05-25 18:26:52

1
SELECT d.DepName, COUNT(e.Name) 
    FROM Department d 
     LEFT JOIN Employees e 
      ON d.DepartID = e.DepartID 
    GROUP BY d.DepName 
+0

這假設部門名稱是唯一的。 'DepartID'似乎是一個更好的事情'分組' – 2011-05-25 16:31:03

1

無需子查詢。

SELECT dep.DepName, COUNT(emp.Name) 
FROM DepName dep 
    LEFT OUTER JOIN Employees emp ON dep.DepartID = emp.DepartID 
GROUP BY dep.DepName 
+0

這假設部門名稱是唯一的。 ''bypartid'似乎是一件更好的事情 – 2011-05-25 16:32:18

1
SELECT COUNT(DISTINCT Name) FROM 
Department AS d, Employees AS e 
WHERE d.DepartID=e.DepartID AND d.DepName = '$thename' 
1

,並避免使用group by,節省您的queryplan排序操作:

SELECT 
    Department.DepName, 
    (SELECT COUNT(*) 
    FROM Employees 
    WHERE Employees.DepartID = Department.DepartID) 
FROM 
    Department