2011-01-14 8 views
7

Tôi có một bảng loại,SQL đệ quy query

1) Id
2) CategoryName
3) CategoryMaster

với dữ liệu như:

1 Computers 0
2 phần mềm 1
3 Đa phương tiện 1
4 Hoạt ảnh 3
5 Y tế 0
6 Healt hsub 5

và tôi đã tạo ra truy vấn đệ quy như:

;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 

tôi nhận được các kết quả cho loại cha mẹ xuống dưới, như tôi nhận được tất cả các loại phụ cho máy tính

nhưng tôi muốn các kết quả từ từ dưới lên như từ Hoạt hình đến Máy tính, xin vui lòng một số có thể gợi ý cho tôi hướng đi đúng.

Cảm ơn bạn trước :)

Trả lời

5

Chỉ cần trao đổi các lĩnh vực trong mệnh đề tham gia:

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