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

Откуда:
Сообщений: 416
Уважаемые, форумчане.

Как построить дерево вверх MS_SQL 2012 ?
просьба кодом.
18 окт 16, 15:47    [19795326]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
stinggga, а как вы его "сажали"?
18 окт 16, 15:55    [19795381]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
stinggga
Member

Откуда:
Сообщений: 416
buser,

ID,ParentID
1 null
2 1
3 2

нужно к примеру по 3-му узлу в табличном выводе получить 2,1
18 окт 16, 16:03    [19795433]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
stinggga,

а дерево вниз вы строить умеете?
https://www.google.com.ua/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&q=cte tree structure&oq=cte tree&aqs=chrome.1.69i57j0l5.4431j0j7
18 окт 16, 16:07    [19795462]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
stinggga
Member

Откуда:
Сообщений: 416
TaPaK,

Надо вверх
18 окт 16, 16:16    [19795507]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
stinggga
TaPaK,

Надо вверх

ссылку дал
18 окт 16, 16:17    [19795512]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
stinggga
Member

Откуда:
Сообщений: 416
TaPaK
stinggga
TaPaK,

Надо вверх

ссылку дал


не нашёл вверх по дереву. Если есть возможность помогите кодом
18 окт 16, 16:31    [19795566]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
stinggga
не нашёл вверх по дереву. Если есть возможность помогите кодом


https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume , пункт 4 и пункт 6
18 окт 16, 16:33    [19795579]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
stinggga
TaPaK
пропущено...

ссылку дал


не нашёл вверх по дереву. Если есть возможность помогите кодом

вы деревья никогда не видели??

DECLARE @Tree TABLE 
(
	Id		INT,
	ParentID	INT 
)

INSERT INTO @Tree (ID,ParentID)
VALUES (1,null),(2,1),(3,2)

DECLARE @Id INT = 3

;WITH TreeUP
AS
(
	SELECT 
		Id,
		ParentId, 
		[Level] = 0
	FROM @Tree
	WHERE
		@Id = Id
	
	UNION ALL

	SELECT 
		a.Id,
		a.ParentId, 
		[Level] = [Level] + 1
	FROM 
		@Tree	a
	JOIN
		TreeUP	b
	ON
		a.Id = b.ParentId	
)
SELECT * FROM TreeUP

SET @Id = 1
;WITH TreeDown
AS
(
	SELECT 
		Id,
		ParentId, 
		[Level] = 0
	FROM @Tree
	WHERE
		@Id = Id
	
	UNION ALL

	SELECT 
		a.Id,
		a.ParentId, 
		[Level] = [Level] + 1
	FROM 
		@Tree	a
	JOIN
		TreeDown	b
	ON
		a.ParentId = b.Id
)
SELECT * FROM TreeDown
18 окт 16, 16:43    [19795638]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
stinggga
Member

Откуда:
Сообщений: 416
TaPaK,

спасибо
18 окт 16, 16:46    [19795664]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
anvg
Member

Откуда: СПб
Сообщений: 101
Доброе время суток.
TaPaK, а обязательно низ было через переменную высоты дерева задавать @Id? А если листья не на одной высоте? Или чтобы не пугать ТС тем, что вершина может иметь, в случае обхода снизу вверх, разные уровни (в случае не равноуровневых листов)?
Declare @Tree As Table (Id int, ParentId int);
Insert Into @Tree Values(1, null), (2, 1), (4, 1),
                                        (3, 2), (5, 4), (6, 3);
Select * From @Tree;
With TreeUp As
(
       Select TLeaf.Id, TLeaf.ParentId, 0 As [Level] 
       From @Tree TLeaf
             Left Join @Tree TAll On (TLeaf.Id = TAll.ParentId)
       Where TAll.ParentId Is Null
Union All
       Select TAll.Id, TAll.ParentId, TNext.[Level] + 1
       From TreeUp TNext
             Inner Join @Tree TAll On (TNext.ParentId = TAll.Id)
)
Select * From TreeUp;
18 окт 16, 17:50    [19796011]     Ответить | Цитировать Сообщить модератору
 Re: Как построить дерево вверх MS_SQL 2012  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
anvg,

автор
обязательно низ было через переменную высоты дерева задавать

автор
нужно к примеру по 3-му узлу в табличном выводе получить 2,1

кто чего хочет
18 окт 16, 17:58    [19796051]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить