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

Откуда:
Сообщений: 2
Порылся в поиске, но ничего конкретного так и не нашел.

Исходные данные:
-- ParentID - код родителя
-- TLevel - уровень вложенности (возможно можно обойтись и без него)

CREATE TABLE [dbo].[Folder] (
	[ObjectID] [int] NOT NULL,
	[ParentID] [int],
        [TLevel]  [int]
) ON [PRIMARY]
GO

INSERT INTO Folder (ObjectID, ParentID, TLevel) VALUES (1,null,null)
INSERT INTO Folder (ObjectID, ParentID, TLevel) VALUES (2,1,1)
INSERT INTO Folder (ObjectID, ParentID, TLevel) VALUES (3,1,1)
INSERT INTO Folder (ObjectID, ParentID, TLevel) VALUES (4,3,2)
INSERT INTO Folder (ObjectID, ParentID, TLevel) VALUES (5,4,3)

INSERT INTO Folder (ObjectID, ParentID, TLevel) VALUES (6,null,null)
INSERT INTO Folder (ObjectID, ParentID, TLevel) VALUES (7,6,1)
INSERT INTO Folder (ObjectID, ParentID, TLevel) VALUES (8,6,1)

Исходный вид таблицы:
ObjectID ParentID TLevel
1nullnull
211
311
432
543
6nullnull
761
861


Суть запроса:
Сделать View, из которой будет удобно получать по ObjectID все вложенные элементы. Вложенность элементов может быть не ограничена. View требуется для интеграции с другой системой.

Примеры вывода:

SELECT * FROM MyTree
MyRootID MyObjectID
12
13
14
15
67
68


SELECT * FROM MyTree WHERE MyRootID = 6
MyRootID MyObjectID
67
68


Версия:
Microsoft SQL Server 2005
28 июн 11, 16:23    [10887797]     Ответить | Цитировать Сообщить модератору
 Re: Получить выборку всех подчиненных ветвей для корневых элементов дерева  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
http://msdn.microsoft.com/en-us/library/ms186243.aspx
28 июн 11, 16:39    [10887960]     Ответить | Цитировать Сообщить модератору
 Re: Получить выборку всех подчиненных ветвей для корневых элементов дерева  [new]
Начинающий SQL 2008
Member

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

В свое время когда-то находил:
9431654

А вот моя тема, здесь посложнее:
10546216
28 июн 11, 17:07    [10888201]     Ответить | Цитировать Сообщить модератору
 Re: Получить выборку всех подчиненных ветвей для корневых элементов дерева  [new]
sanches1984
Member

Откуда:
Сообщений: 2
Спасибо всем :) Для ищущих - у меня получилось вот что:

-- ProjectCode - строковое поле из моей исходной таблицы (вывожу его, вместо ObjectID для корневого родителя
WITH DirectReports(ObjectID, ParentID, ProjectCode) AS (SELECT     
                          ObjectID, ObjectID AS Expr1, ProjectCode
                          FROM         dbo.Folder
                          WHERE       (ParentID IS NULL)
                          UNION ALL
                          SELECT      e.ObjectID, d.ObjectID AS Expr1, d.ProjectCode
                          FROM         dbo.Folder AS e INNER JOIN
                                          DirectReports AS d ON e.Parent = d.ObjectID)
SELECT DISTINCT TOP (100) PERCENT ObjectID, ProjectCode
     FROM          DirectReports AS DirectReports_1
     WHERE        (ProjectCode IS NOT NULL)
     ORDER BY     ProjectCode
28 июн 11, 17:31    [10888367]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить