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

Откуда: Киев
Сообщений: 438
Привет,

Подскажите, пожалуйста, как оптимально преобразовать таблицу-дерево в справочник, содержащий в строках только листья (самый нижний уровень) и отдельные колонки со всеми родителями. Всего 3 уровня- департамент, отдел, служба (служб в отделе может и не быть). Как-то так:

declare @data table (id int, parentId int, name varchar(20))

insert @data (id, parentId, name) values
(10,null,'ДепартаментА')
,(11,10,'ОтделА1')
,(12,10,'ОтделА2')
,(20,null,'ДепартаментБ')
,(21,20,'ОтделБ1')
,(22,20,'ОтделБ2')
,(23,22,'СлужбаБ21')
,(24,22,'СлужбаБ22')

-- Имеем
select * from @data

-- Необходимо получить что-то такое
select * from (values 
	(11, 'ДепартаментА','ОтделА1',null)
	,(12, 'ДепартаментА','ОтделА2',null)
	,(21, 'ДепартаментБ','ОтделБ1',null)
	,(23, 'ДепартаментБ','ОтделБ2','СлужбаБ21')
	,(24, 'ДепартаментБ','ОтделБ2','СлужбаБ21')
) t(id, department, otdel, serv)


MSSQL2014, VS2013, msoffice2007

К сообщению приложен файл. Размер - 1Kb
12 окт 15, 11:19    [18266380]     Ответить | Цитировать Сообщить модератору
 Re: Дерево развернуть в таблицу  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8816
В отдельные колонки можно развернуть самообъединением. У Вас-то число уровней фиксировано.
12 окт 15, 11:22    [18266400]     Ответить | Цитировать Сообщить модератору
 Re: Дерево развернуть в таблицу  [new]
Leax
Member

Откуда: Киев
Сообщений: 438
Да, так проще всего, спасибо
12 окт 15, 12:46    [18266918]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить