Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Преобразование дерева из "Adjacency List" в "nested set"  [new]
hail3b
Guest
Помогите пожалуйста преобразовать дерево из вида "Список смежных вершин (Adjacency List)" таблица [_source] в вид "Вложенное множество (Nested Set)" таблица @dest.

--SELECT @@VERSION => Microsoft SQL Server 2008 (SP2)

DECLARE @s table(
	id int,
	id_parent int,
	name varchar(10)
)

DECLARE @str varchar(100) = '                     '

INSERT INTO @s VALUES
(1, 0, 'root'),
(2, 1, 'lev1'),
(3, 2, 'lev1.1'),
(4, 1, 'lev2'),
(5, 4, 'lev2.1'),
(6, 4, 'lev2.2')

;WITH _source AS(
	select *, CAST(id as varchar(100)) ind, 0 lev
	from @s where id = 1
	UNION ALL
	select s.*, CAST( t1.ind+'.'+CAST(s.id as varchar(100)) as varchar(100)) ind, lev+1 lev
	from @s s
		JOIN _source t1 ON t1.id = s.id_parent
)

-- ИСХОДНЫЕ ДАННЫЕ
select LEFT(@str,lev*3)+name nametr, *
from _source
ORDER BY IND



DECLARE @dest table(
	id int,
	n_left int,
	n_right int,
	name varchar(100)
)

INSERT INTO @dest VALUES
(1, 1,	12,	'root'),
(2, 2,	5,	'lev1'),
(3, 3,	4,	'lev1.1'),
(4, 6,	11,	'lev2'),
(5, 7,	8,	'lev2.1'),
(6, 9,	10,	'lev2.2')

-- РЕЗУЛЬТАТ
select *
from @dest
21 дек 12, 16:39    [13667324]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить