例如,使用AdventureWorks,我希望获得所有员工及其经理的列表,其中管理者的下级最多。通过使用GROUP BY可以轻松获得每个经理所拥有的报告数量,但我想要在不同的行上实际列出他们的下属。
SELECT
Subordinate.LoginID, Subordinate.Title, Manager.LoginID, Manager.Title
FROM
HumanResources.Employee Subordinate
JOIN HumanResources.Employee Manager
ON Subordinate.ManagerID = Manager.EmployeeID
ORDER BY
??
答案 0 :(得分:3)
假设您至少使用SQL Server 2005,则可以使用
ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID) DESC
虽然我想
ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID) DESC, Manager.LoginID
可能更好地避免可能为具有绑定数量的下属的经理混淆结果行。