2011-01-14 5 views
7

У меня есть таблица категорий,SQL рекурсивный запрос

1) Id
2) CategoryName
3) CategoryMaster

с данными, как:

1 Компьютеры 0
2 Программное обеспечение 1
3 Мультимедиа 1
4 Анимация 3
5 Здоровье 0
6 Healt hsub 5

и я создал рекурсивный запрос, как:

;WITH CategoryTree AS 
(
    SELECT *, CAST(NULL AS VARCHAR(50)) AS ParentName, 0 AS Generation  
    FROM dbo.Category  
    WHERE CategoryName = 'Computers' 

    UNION ALL   

    SELECT Cat.*,CategoryTree.CategoryName AS ParentName, Generation + 1  
    FROM dbo.Category AS Cat INNER JOIN 
    CategoryTree ON Cat.CategoryMaster = CategoryTree.Id 
) 

SELECT * FROM CategoryTree 

Я получаю результаты для родительской категории вниз, как я получить все подкатегории для компьютера

, но я хочу, чтобы результаты снизу вверх, например, от анимации до компьютеров, пожалуйста, кто-нибудь подскажет мне правильное направление.

Спасибо заранее :)

ответ

5

просто поменять поля в пункте присоединения:

WITH CategoryTree AS 
     (
     SELECT *, 0 AS Generation  
     FROM dbo.Category 
     WHERE CategoryName = 'Animation' 
     UNION ALL 
     SELECT Cat.*, Generation + 1  
     FROM CategoryTree 
     JOIN dbo.Category AS Cat 
     ON  Cat.Id = CategoryTree.CategoryMaster 
     ) 
SELECT * 
FROM CategoryTree