pdsQ Ответов: 2

Sql-запросы для управления иерархическими или родительско-дочерними реляционными графами в SQL server


Привет,
Это было очень хорошо написанное решение для "
SQL Queries to Manage Hierarchical or Parent-child Relational Rows in SQL Server
"
около
[^]

У меня есть таблица под названием DocuTree, и она имеет несколько столбцов, но основные столбцы-PArentID, ChildID, Name, Date, и я хотел бы получить подсчеты для каждой родительской/дочерней записи в a
Hierarchical way 
- Если ты сможешь мне помочь. У нас их несколько
Hierarchic
поэтому я хотел получить обе эти информации.

Hierarchic Level counts

CORP	18

Under CORP out of 18, one is Sales
Sales Have 4 folder counts
under Sales 
		Counts
ITTemp		0
Agreements	1
Contracts	6
Procedures	10

If I take Contracts then
Sales-Contract_AG	Sales-Contract_DEF	Sales-Contract_EXP	Sales-Contract_IND	Sales-Contract_INT	Sales-Contract_LT
4			5			1			4			1			3

If i take as a example Sales-Contract_AG then it has another 4 folder like

Sales-Contract_AG-Assign	0
Sales-Contract_AG- IProg	1
Sales-Contract_AG -MP		5
Sales-Contract_AG -Term		2

 need all PArent and Child and Sub-child folders counts by name


Что я уже пробовал:

Считает иерархии в SQL запросе

2 Ответов

Рейтинг:
2

pdsQ

Привет,
Спасибо за предоставленную ссылку, она показывает иерархию родителей и детей, но я ищу подсчеты для каждой категории и подкатегории.
Пример:

Hierarchic Level counts

CORP	18

Under CORP out of 18, one is Sales
Sales Have 4 folder counts
under Sales 
		Counts
ITTemp		0
Agreements	1
Contracts	6
Procedures	10

If I take Contracts then
Sales-Contract_AG	Sales-Contract_DEF	Sales-Contract_EXP	Sales-Contract_IND	Sales-Contract_INT	Sales-Contract_LT
4			5			1			4			1			3

If i take as a example Sales-Contract_AG then it has another 4 folder like

Sales-Contract_AG-Assign	0
Sales-Contract_AG- IProg	1
Sales-Contract_AG -MP		5
Sales-Contract_AG -Term		2

 need all PArent and Child and Sub-child folders counts by name


MadMyche

Пожалуйста, ознакомьтесь с обновленным ответом

Richard Deeming

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" нажмите кнопку под этим решением и оставьте комментарий.

Не опубликуйте свой комментарий как "решение".

Рейтинг:
13

MadMyche

Для родитель-ребенок самостоятельно ссылающейся таблице, там будут разные процедуры, чтобы быть сделано:

Постройте иерархическую структуру
У вас уже есть таблица базы данных, вам понадобится рекурсивная функция для создания набора данных, который отражает, как эта структура выглядит как дерево. Есть много примеров примерного кода для этого, включая этот с некоторыми функциями управления, расположенными здесь
SQL-запросы для управления иерархическими или родительско-дочерними реляционными строками в SQL Server[^]

Подсчитайте детей для любого конкретного родителя
Это будет очень просто; в основном вам нужно сделать подсчет детей для каждого родителя

Советы и усилитель; советы
Когда мои веб-приложения, использующие родительско-дочерние структуры, редактируются, я запускаю хранимую процедуру, которая перестраивает иерархию и сохраняет ее в новой таблице, так что рекурсию не нужно выполнять при каждом вызове.
В самой таблице parent-cild есть поля, содержащие количество дочерних элементов, а также количество элементов в этой категории.


Обновление
Пример кода для подсчета детей
Пожалуйста, обратите внимание на квадратные скобки вокруг [Name]; это потому, что это зарезервированное слово. Обычно рекомендуется не использовать их при проектировании таблиц и т. д. Так как это может вызвать проблемы если квадратные скобки опущены
SELECT    p.[Name], Children = Count(c.ParentID)
FROM      DocuTree  p
LEFT JOIN DocuTree  c ON p.ChildID = c.PhildID
GROUP BY  p.[Name]


pdsQ

Очень хорошо, очень ценю это!

Большое вам спасибо!