SQL Server CTE выбирает структуру с одной ветвью дерева до корня

Можно ли передать параметр в CTE, который выбирает узел, а затем выбирает его родительский узел до корня, где parentId ] нулевой?

В моем коде ниже, если я передаю параметр, который выбирает Rain Coats, а затем рекурсивно просматривает дерево до мужской одежды, где его parentId имеет значение NULL, и выбираются все узлы в этой ветке, включая дочерние. Может кто-нибудь помочь мне с этим, пожалуйста. Мой пример просто повторяется и показывает глубину

Пример SQL:

DECLARE @Department TABLE
(
    Id INT NOT NULL,
    Name varchar(50) NOT NULL,
    ParentId int NULL
)

INSERT INTO @Department SELECT 1, 'Toys', null
INSERT INTO @Department SELECT 2, 'Computers', null
INSERT INTO @Department SELECT 3, 'Consoles', 2
INSERT INTO @Department SELECT 4, 'PlayStation 3', 3
INSERT INTO @Department SELECT 5, 'Xbox 360', 2
INSERT INTO @Department SELECT 6, 'Games', 1
INSERT INTO @Department SELECT 7, 'Puzzles', 6
INSERT INTO @Department SELECT 8, 'Mens Wear', null
INSERT INTO @Department SELECT 9, 'Mens Clothing', 8
INSERT INTO @Department SELECT 10, 'Jackets', 9
INSERT INTO @Department SELECT 11, 'Rain Coats', 10

;WITH c 
AS
(
    SELECT Id, Name,1 AS Depth
    FROM @Department
    WHERE ParentId is null  

         UNION ALL

         SELECT t.Id, t.Name, c.Depth + 1 AS 'Level'
    FROM @Department T  
    JOIN c ON t.ParentId = c.Id

)
SELECT * FROM c WHERE c.Id = 3
6
задан marc_s 22 December 2011 в 09:57
поделиться