how to get child categorys based on categoryid
Using recursive CTE. Is this what you wanted?

sample data:

/*
CREATE TABLE #Table
(
    CategoryID INT
    , Name VARCHAR(MAX)
    , IsParent BIT
    , PCategoryID INT
);

INSERT INTO #Table 
  (CategoryID, Name, IsParent, PCategoryID)
VALUES
  (1, 'IIT', 1, 0),
  (2, 'IIT Maths', 0, 1),
  (3, 'IIT Chemistry', 0, 1),
  (4, 'IIT Physics', 0, 1),
  (5, 'Education', 1, 0),
  (6, 'Learnig', 0, 5),
  (7, 'Writing', 0, 5),
  (8, 'Sports', 1, 0),
  (9, 'Cricket', 0, 8),
  (10, 'Algebra', 0, 2),
  (11, 'Basic Algebra', 0, 10),
  (12, 'Trigonometry', 0, 2),
  (13, 'Geometry', 0, 2),
  (14, 'Al Cat-1', 0, 10),
  (15, 'Al Cat-2', 0, 10),
  (16, 'Tri Cat-1', 0, 12);
*/


the actual query:

;WITH CTE (CategoryID, Name, PCategoryID, Level, SortOrder)
AS (
    SELECT T.CategoryID, T.Name, T.PCategoryID, 0 AS Level, T.Name AS SortOrder
    FROM #Table AS T
    WHERE T.CategoryID = 1    --Your CategoryID here! :)

    UNION ALL

    SELECT T.CategoryID, T.Name, T.PCategoryID, C.Level + 1,  C.SortOrder + T.Name
    FROM #Table AS T
    INNER JOIN CTE AS C
        ON C.CategoryID = T.PCategoryID
)
SELECT CategoryID, PCategoryID, Level, SPACE(Level*3) + Name AS NameIndented
FROM CTE
ORDER BY SortOrder;