WITH ReportCategoryList AS (
SELECT *, 1 AS CategoryLevel
FROM tblTestCategories
WHERE ReportCategoryID IS NULL
AND ID IN (SELECT ReportCategoryID from tblTestCategories)
UNION ALL
SELECT TC.*, RCL.CategoryLevel + 1
FROM tblTestCategories AS TC INNER JOIN ReportCategoryList RCL ON TC.ReportCategoryID = RCL.ID
)
SELECT *
FROM ReportCategoryList RCL
ORDER BY RCL.CategoryLevel, RCL.ID