我有一个“任务”表具有以下的列(在TaskOrder是父,而不是整个表的范围内订购儿童):订购层次2005
TaskId ParentTaskId TaskName TaskOrder
我有了这个CTE查询返回的所有行:
with tasks (TaskId, ParentTaskId, [Name]) as
(
select parentTasks.TaskId,
parentTasks.ParentTaskId,
parentTasks.[Name]
from Task parentTasks
where ParentTaskId is null
union all
select childTasks.TaskId,
childTasks.ParentTaskId,
childTasks.[Name]
from Task childTasks
join tasks
on childTasks.ParentTaskId = tasks.TaskId
)
select * from tasks
此查询返回由他们的水平排列如你所期望的所有任务。我如何改变它以按照下面的顺序将结果排序为它们的层次结构顺序?
- Task 1 -- Task 1 Subtask 1 -- Task 1 Subtask 2 - Task 2 - Task 3
谢谢。
编辑:答案应该可以使用无限数量的关卡。你可以这样做
你只是试验CTE,还是比直接SQL更简单? – dkretz 2009-02-11 22:53:38
是的,试验CTE,但如果有更好的解决方案,直接使用SQL我会使用.. – Nick 2009-02-11 23:04:31