2011-01-14 25 views
7

Tengo una Tabla de Categoría,SQL consulta recursiva

1) Id
2) CategoryName
3) CategoryMaster

con datos como:

1 Computadoras 0
2 Software 1
3 Multimedia 1
4 Animación 3
5 Salud 0
6 Healt HAltavoz potenciador de 5

y he creado consulta recursiva como:

;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 

puedo obtener los resultados de categoría padre a abajo, como me sale todas las categorías sub para la computadora

pero yo quiero que los resultados de De abajo hacia arriba como de Animación a Computadoras, por favor, puede alguien sugerirme la dirección correcta.

gracias de antemano :)

Respuesta

5

sólo cambio los campos de la cláusula de combinación:

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