SQL code: DECLARE @TB TABLE([Id] INT, [parentId] INT) INSERT @TB SELECT 17, 16 UNION ALL SELECT 16, 0 UNION ALL SELECT 15, 0 UNION ALL SELECT 14, 1 UNION ALL SELECT 13, 6 UNION ALL SELECT 12, 8 UNION ALL SELECT 11, 1 UNION ALL SELECT 10, 2 UNION ALL SELECT 9, 1 UNION ALL SELECT 8, 0 UNION ALL SELECT 7, 0 UNION ALL SELECT 6, 0 UNION ALL SELECT 5, 1 UNION ALL SELECT 4, 2 UNION ALL SELECT 3, 1 UNION ALL SELECT 2, 0 UNION ALL SELECT 1, 0
DECLARE @STR VARCHAR(MAX) SET @STR=''
;WITH CTE AS ( SELECT *,ID AS GRP from @TB WHERE [parentId]=0 UNION ALL SELECT T.*,CTE.ID from @TB AS T JOIN CTE ON T.[parentId]=CTE.ID ) SELECT @STR=@STR+','+RTRIM(ID) from CTE ORDER BY GRP DESC,[parentId],ID