Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите плз с простым запросом для избавления от рекурсии. / 4 сообщений из 4, страница 1 из 1
22.10.2002, 08:00:01
    #32060517
albertik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз с простым запросом для избавления от рекурсии.
Обращаюсь к уважаемым ГУРУ.
Порблема такая - надо основываясь на таблицу построить дерево. В таблице хранятся данные рдительской записи примерно в таком виде:

id name parent_id
1 name1 0
2 name2 0
3 name1_1 1
4 name1_2 1
5 name1_1_1 3

Необходимо получить дерево вида:
name1
_____ name1_1
_________ name1_1_1
_____ name1_2
name2

За ранее все огромное спасибо!
...
Рейтинг: 0 / 0
22.10.2002, 08:01:40
    #32060518
Luchkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз с простым запросом для избавления от рекурсии.
поищи в форуме, а? здесь уже столько раз это всё.....
...
Рейтинг: 0 / 0
22.10.2002, 08:03:28
    #32060520
Luchkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз с простым запросом для избавления от рекурсии.
/topic/10197
...
Рейтинг: 0 / 0
22.10.2002, 12:38:00
    #32060664
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз с простым запросом для избавления от рекурсии.
Ну, вот так можно примерно (я это кидал когда-то в форум, но найти не смог):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
CREATE TABLE #Hierarchy
(
ID int NOT NULL PRIMARY KEY,
ParentID int NULL,
IsFolder int NOT NULL,
Descr nvarchar( 100 ) NOT NULL
)

Insert Into #Hierarchy
VALUES( 1 ,NULL, 1 ,'Folder1')
Insert Into #Hierarchy
VALUES( 2 ,NULL, 1 ,'Folder2')
Insert Into #Hierarchy
VALUES( 3 ,NULL, 1 ,'Folder3')
Insert Into #Hierarchy
VALUES( 4 ,NULL, 1 ,'Folder4')

Insert Into #Hierarchy
VALUES( 11 , 1 , 1 ,'Folder11')
Insert Into #Hierarchy
VALUES( 12 , 1 , 1 ,'Folder12')
Insert Into #Hierarchy
VALUES( 110 , 11 , 0 ,'Item110')
Insert Into #Hierarchy
VALUES( 120 , 12 , 0 ,'Item120')

Insert Into #Hierarchy
VALUES( 121 , 12 , 1 ,'Folder121')
Insert Into #Hierarchy
VALUES( 1210 , 121 , 0 ,'Item1210')

 /******************************************************************
Выбрать элементы, принадлежащие заданной группе.
ID Группы поместить в переменную @ID
Поместить туда NULL если требуется выбрать все элементы справочника
******************************************************************/ 

DECLARE @ID int
Set @ID=NULL

DECLARE @Level int
Set @Level= 1 

create table #tmp1(id int not null,[level] int not null, path nvarchar( 3000 ) not null)
If @ID Is NULL
	Insert Into #tmp1
	Select
		id,
		@level,
		descr
	From
		#Hierarchy
	WHERE
		ParentID Is NULL
ELSE
	Insert Into #tmp1
	Select
		id,
		@level,
		descr
	From
		#Hierarchy
	WHERE
		ParentID=@ID

WHILE @@rowcount> 0 
BEGIN
	Set @level=@level+ 1 
	Insert Into #tmp1
	Select
		h.id,
		@level,
		t.path+CHAR( 0 )+h.descr
	From
		#tmp1 t
		inner join #Hierarchy h
			on t.id=h.Parentid and t.[level]=@level- 1 
END

 /*****************************************************
Вывод результатов в иерархическом виде
*****************************************************/ 
Select
	t.id,
	SPACE((t.[level]- 1 )* 5 )+h.Descr,
	h.IsFolder
From
	#tmp1 t
	inner join #Hierarchy h
		on t.id=h.id
Order By
	t.path
drop table #tmp1


С уважением,
Александр Степанов
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите плз с простым запросом для избавления от рекурсии. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]