MS SQL нужно Выбрать все разделы и подсчитать количество потомков во всех его узлах(по его ветке). Через рекурсию
Имеется таблица вида:
ID ParentID Name
1 0 Раздел 1
2 0 Раздел 2
3 0 Раздел 3
4 1 Раздел 4
5 1 Раздел 5
6 4 Раздел 6
7 2 Раздел 7
8 2 Раздел 8
9 3 Раздел 9
10 2 Раздел 10
11 2 Раздел 11
12 11 Раздел 12
13 6 Раздел 13
14 6 Раздел 14
15 9 Раздел 15
16 9 Раздел 16
17 9 Раздел 17
18 9 Раздел 18
19 17 Раздел 19
20 19 Раздел 20
Как Выбрать все разделы и подсчитать количество потомков во всех его узлах(по его ветке)?
WITH rec4 (id, pid, name)
AS
(
SELECT id, parentID, name
FROM parent
WHERE id = 1
UNION ALL
SELECT p.id, p.parentID, p.name
FROM parent AS p
JOIN rec4 AS r ON p.parentID = r.id
)
SELECT * FROM rec4 ;
Так показывает дочерние элементы только одного родителя. Как выбрать всех и показать их количество?
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
WITH rec4 (id, pid, name, root_id)
AS
(
SELECT id, parentID, name, id root_id
FROM parent
WHERE ParentID = 0
UNION ALL
SELECT p.id, p.parentID, p.name, root_id
FROM parent AS p
JOIN rec4 AS r ON p.parentID = r.id
)
SELECT COUNT(*) AS tree_nodes_amount
FROM rec4
GROUP BY root_id;
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=be949ede1740a5bad81bcb201160e164