7

我有一个表格类别,

1) ID
2) CategoryName
3) CategoryMaster

数据为:

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

我将父类别的结果放在底部,就像我得到计算机的所有子类别一样

但我想要自下而上的结果,比如从动画到计算机,请有人建议我正确的方向。

先感谢您 :)

4

1 回答 1

5

只需交换 join 子句中的字段:

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
于 2011-01-14T11:10:00.853 回答