Een manier om dit te doen is door een hiërarchiekolom toe te voegen die alle eerdere ID's in een lijst heeft:
with tasks (TaskId, ParentTaskId, [Name], TaskIdList) as
(
select parentTasks.TaskId,
parentTasks.ParentTaskId,
parentTasks.[Name],
parentTasks.TaskId
from Task parentTasks
where ParentTaskId is null
union all
select childTasks.TaskId,
childTasks.ParentTaskId,
childTasks.[Name],
tasks.TaskIdList + '.' + childTasks.TaskId
from Task childTasks
join tasks
on childTasks.ParentTaskId = tasks.TaskId
)
select TaskId, ParentTaskId, [Name] from tasks
order by TaskIdList
Houd er rekening mee dat dit ervan uitgaat dat TaskId een op tekenreeksen gebaseerde ID is. Zo niet, dan moet je het naar een varchar casten voordat je het samenvoegt.