powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите плз с простым запросом для избавления от рекурсии.
4 сообщений из 4, страница 1 из 1
Помогите плз с простым запросом для избавления от рекурсии.
    #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
Помогите плз с простым запросом для избавления от рекурсии.
    #32060518
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поищи в форуме, а? здесь уже столько раз это всё.....
...
Рейтинг: 0 / 0
Помогите плз с простым запросом для избавления от рекурсии.
    #32060520
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/topic/10197
...
Рейтинг: 0 / 0
Помогите плз с простым запросом для избавления от рекурсии.
    #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
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите плз с простым запросом для избавления от рекурсии.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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