Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment obtenir le niveau de hiérarchie de cette requête

Vous devez ajouter une colonne appelée Level (ou appelez-le comme vous voulez) - à la fois au SELECT "d'ancrage" ainsi qu'à la partie récursive de votre CTE - comme ceci :

WITH CategoryRec AS 
(
    SELECT Id, Parentid, Name, 1 AS 'Level'
    FROM dbo.Category

    UNION ALL

    SELECT cr.Id, c.Parentid, cr.Name, cr.Level + 1 
    FROM CategoryRec AS cr 
    INNER JOIN dbo.Category AS c ON cr.Parentid = c.Id
    WHERE c.Parentid IS NOT NULL
)
SELECT DISTINCT Id, Parentid, Name, Level
FROM  CategoryRec