В TSQL как упорядочить по "наиболее встречающимся" значениям - PullRequest
5 голосов
/ 12 мая 2011

Например, используя 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 Ответ

3 голосов
/ 12 мая 2011

Если вы используете хотя бы SQL Server 2005, вы можете использовать

ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID)  DESC

Хотя я полагаю, что

ORDER BY COUNT(*) OVER (PARTITION BY Manager.LoginID) DESC,  Manager.LoginID

может быть лучше избежать потенциально смешанных строк результатов для менеджеров с привязанными номерамиподчиненных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...