2011-01-14 171 views
7

我有一个表的类别,SQL递归查询

1)标识
2)类别名称
3)CategoryMaster

用数据为:

1计算机0
2软件1
3多媒体1
4动画3
5健康0
6治疗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