We have to induct intelligence about the child precedence somewhere to get the required result. I have modified the child structure adding number (1, 2, 3) against each parent. This have resolved the query easily.
DECLARE @parent TABLE
(ParentNum INT,
ParentName VARCHAR(50));
DECLARE @child TABLE
(ID INT,
ChildNum INT,
ChildParentNum INT,
ChildName VARCHAR(20)
);
INSERT INTO @parent VALUES(10,'John');
INSERT INTO @parent VALUES(20,'Jane');
INSERT INTO @parent VALUES(30,'Jackie');
INSERT INTO @child VALUES(1,1,10,'Johnny')
INSERT INTO @child VALUES(2,1,20,'Jackie')
INSERT INTO @child VALUES(3,2,20,'Billy')
INSERT INTO @child VALUES(4,3,20,'Sally')
INSERT INTO @child VALUES(5,1,30,'Monique')
INSERT INTO @child VALUES(6,2,30,'Monu')
select ParentName, Isnull(Child1, '') Child1, Isnull(Child2, '') Child2, Isnull(Child3, '') Child3, Isnull(Child4, '') Child4, Isnull(Child5, '') Child5, Isnull(Child6, '') Child6
from
(
select p.ParentName, ChildName, 'Child'+cast(ChildNum as varchar(2)) as ChildNum
from @child c INNER JOIN @parent p on c.ChildParentNum = p.ParentNum
) d
pivot
(
max(ChildName)
for ChildNum in (Child1, Child2, Child3, Child4, Child5, Child6)
) piv;
For N number of child you can achieve the result by creating dynamic query of the same.