Обычно запросом получают данные с итогами и потом обходом результата запроса по группировкам строят дерево.
Вы можете получать данные по уровням через найтиСтроки в таблице значений.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший