Это не красиво, и я уверен, что кто-то лучше использует функцию GROUP BY ROLLUP, но, начав с выходных данных этого, вы можете циклически просмотреть набор результатов и построить отображение на основе иерархии из списка ниже.Уровень 1 будет самой верхней частью дерева, уровень 2 будет ссылаться на уровень 1 и будет второй строкой и т. Д.
Кроме того, как уже упоминалось в комментариях, не публикуйте «данные» в качестве отпечатков экрана..
SELECT div_branch, null as reg_branch, null as branch, '1' as level
FROM @bracnhes
GROUP BY div_branch
union all
SELECT div_branch, reg_branch, null as branch, '2' as level
FROM @bracnhes
GROUP BY div_branch, reg_branch
union all
SELECT div_branch, reg_branch, branch, '3' as level
FROM @bracnhes
GROUP BY div_branch, reg_branch, branch
Мой вывод, по крайней мере, немного, с которым я удосужился проверить, выглядит так
div_branch reg_branch branch level
150 NULL NULL 1
273 NULL NULL 1
356 NULL NULL 1
150 150 NULL 2
150 401 NULL 2
273 248 NULL 2
273 273 NULL 2
356 356 NULL 2
356 357 NULL 2
356 361 NULL 2
150 150 150 3
150 150 151 3
150 150 153 3
150 150 154 3
150 150 961 3