У меня есть иерархическая таблица в SQL Server 2005, которая содержит сотрудников -> менеджеры -> отдел -> местоположение -> состояние.
Пример таблицы для таблицы иерархии:
ID Name ParentID Type
1 PA NULL 0 (group)
2 Pittsburgh 1 1 (subgroup)
3 Accounts 2 1
4 Alex 3 2 (employee)
5 Robin 3 2
6 HR 2 1
7 Robert 6 2
Вторая - это таблица фактов, которая содержит идентификатор зарплаты сотрудника и зарплату.
Пример данных для таблицы фактов:
ID Salary
4 6000
5 5000
7 4000
Есть ли хороший способ отобразить иерархию из таблицы иерархии с агрегированной суммой заработной платы на основе сотрудников. Ожидаемый результат такой
Name Salary
PA 15000 (Pittsburgh + others(if any))
Pittusburgh 15000 (Accounts + HR)
Accounts 11000 (Alex + Robin)
Alex 6000 (direct values)
Robin 5000
HR 4000
Robert 4000
В моей производственной среде таблица иерархии может содержать более 23 000 строк, а таблица фактов может содержать более 300 000 строк. Итак, я подумал о том, чтобы предоставить запросу любой уровень идентификатора группы, чтобы получить только его дочерние элементы и соответствующее им агрегированное значение. Любое лучшее решение?