Just using DENSE_RANK:
DECLARE @YourTable TABLE(ID INT,ParentID VARCHAR(10),Item VARCHAR(10))
INSERT into @YourTable VALUES(1,' ','root')
INSERT into @YourTable VALUES(2,'1','AA')
INSERT into @YourTable VALUES(3,'1','BB')
INSERT into @YourTable VALUES(4,'1','CC')
INSERT into @YourTable VALUES(5,'1','DD')
INSERT into @YourTable VALUES(6,'2','A1')
INSERT into @YourTable VALUES(7,'6','A11')
SELECT ID,ParentID,Item
,(DENSE_RANK() OVER(ORDER BY ISNULL(NULLIF(ParentID,''),0)))-1 [Level]
FROM @YourTable
Conclusion:
ID ParentID Item Level
1 root 0
2 1 AA 1
3 1 BB 1
4 1 CC 1
5 1 DD 1
6 2 A1 2
7 6 A11 3
Hope this helps you.
source
share