Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Рекурсивно обойти таблицу  [new]
max_factorial
Member

Откуда:
Сообщений: 2
Всем привет.
Есть такая таблица: ID, OrgINN, OrgKPP, FounderID, GroupID.
В ней хранится список организаций и учредителей по ним, т.е. у одной организации может быть как много учредителей так и один.
Мне нужно все организации у которых учредители как косвенно так и прямо связаны распределить по группам.
Т.е. если у организации есть 2 учредителя и у них есть еще 5 организаций, а у этих пяти есть еще учредители и т.д. - так вот они должны относиться к одной группе.
Может кто подаст идею как это сделать можно?
Пробовал с помощью рекурсивного запроса - не смог победить. Т.к. в рек. запросах подразумевается поля подобные ParantID и ChildID.
А здесь сначала надо по ИНН и КПП связывать, потом по идентификатору учредителя и чередовать чтобы рекурсивно пройтись по дереву.
Хотя может быть я не верно таблицу спроектировал или не умею пользоваться рекурсивными запросами.
Буду очень благодарен за помощь.
Спасибо.
20 авг 16, 22:15    [19568513]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивно обойти таблицу  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
max_factorial, не понятно, зачем связывать по ИНН и КПП. А вообще-то, по классике таблиц должно быть две: справочник организаций (Id, OrgINN, OrgKPP), и таблица, связывающая организацию и учредителя (OrgID, FounderID). Явно видно отношение "многое ко многим": организация может иметь нескольких учредителей, и у каждого учредителя может быть несколько организаций.
21 авг 16, 20:00    [19570481]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивно обойти таблицу  [new]
max_factorial
Member

Откуда:
Сообщений: 2
Serg_77m, Хорошо, тут я согласен. Вот будет у меня три таблицы, каким образом можно рекурсивно обработать их и по группам организации распределить?
21 авг 16, 21:10    [19570663]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивно обойти таблицу  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
max_factorial, лучше циклом, а не рекурсией. Чтобы избежать многократных проходов по одним и тем же ветвям. Сначала всем организациям присвоить разные GroupID (взяв, например, ID). Затем для каждой пары организация-учредитель, у которых разные GroupID, выбрать меньший из двух GroupID и обоим этот код присвоить. Повторять пока есть пары с разным GroupID. В результате все организации, входящие в группу, получат одинаковый GroupID.
22 авг 16, 09:56    [19571516]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить