#sql-server #tsql
#sql-server #tsql
Вопрос:
Используя 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
??
Комментарии:
1. Некоторые менеджеры управляют менеджерами?
Ответ №1:
Предполагая, что вы используете по крайней мере SQL Server 2005, вы можете использовать
ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID) DESC
Хотя я полагаю
ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID) DESC, Manager.LoginID
возможно, было бы лучше избегать потенциального смешивания строк результатов для менеджеров с привязанным количеством подчиненных.
Комментарии:
1. Идеально, именно то, что я искал.