Unterabfrage Problem

Abteilung (DepartID, DepName)

Mitarbeiter (Name, DepartID)

Was ich brauche, ist der Graf der Mitarbeiter in der Abteilung mit DepName.

Wenn Sie SQL server Version 2005 oder höher verwenden , ist hier ein weiterer möglicher path, um Mitarbeiter zählen zu zählen. .

 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 

Ich hoffe, das hilft.

Beispiel Testabfrage Ausgabe:

Ausgabe

Ich würde eine outer join anstatt eine Unterabfrage.

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

Keine Notwendigkeit für eine Unterabfrage.

 SELECT dep.DepName, COUNT(emp.Name) FROM DepName dep LEFT OUTER JOIN Employees emp ON dep.DepartID = emp.DepartID GROUP BY dep.DepName 
 SELECT COUNT(DISTINCT Name) FROM Department AS d, Employees AS e WHERE d.DepartID=e.DepartID AND d.DepName = '$thename' 

Und um zu vermeiden, eine group by und speichern Sie eine sorting im Abfrageplan:

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