Найдите количество узлов-потомков в SQL-запросе
В настоящее время я создаю организационную диаграмму, и мне нужно общее количество всех узлов под определенным сотрудником.
Я исследовал, что мне нужно использовать рекурсивный SQL. Но, похоже, он не работает в моем запросе. Вместо этого я неоднократно (я знаю, что это кажется неправильным) помещаю запрос во временную таблицу и добавляю детей сотрудника и так далее. Есть примерные данные:
INSERT INTO @T (ID, name, AdvisorID) VALUES (1, 'Euler', NULL), (2, 'Lagrange', 1), (3, 'Laplace', 1), (4, 'Fourier', 2), (5, 'Poisson', 2), (6, 'Dirichlet', 4), (7, 'Lipschitz', 6), (8, 'Klein', 6), (9, 'Lindemann', 8), (10, 'Furtwangler', 8), (11, 'Hilbert', 9), (12, 'Taussky-Todd', 10);
SELECT ID , name , AdvisorID , (SELECT COUNT(*) FROM @T WHERE AdvisorID = e.ID) AS ChildrenCount INTO #Temp1 FROM @T e SELECT * , (SELECT ISNULL((SUM(ChildrenCount)+e.ChildrenCount),0) FROM #Temp1 WHERE AdvisorID = e.ID) AS Total INTO #Temp2 FROM #Temp1 e SELECT * , (SELECT ISNULL((SUM(Total)+e.ChildrenCount),0) FROM #Temp2 WHERE AdvisorID = e.ID AS Total2 INTO #finalTemp FROM #Temp2 e
и так далее...
Спасибо за помощь. Я просто хочу оптимизировать свой повторяющийся код, потому что он будет слишком долго загружаться на страницу.
Что я уже пробовал:
Как узнать общее количество непосредственных потомков родителя в HierarchyID – SQLServerCentral[^]
postgresql - рекурсивный SQL - подсчет количества потомков в иерархической структуре - переполнение стека[^]
0x01AA
Вы можете посмотреть здесь: sql server - подсчет количества дочерних элементов в иерархических данных SQL - переполнение стека[^]