【发布时间】:2009-02-11 22:31:12
【问题描述】:
我有一个包含以下列的“任务”表(TaskOrder 用于在父级范围内对子级进行排序,而不是整个表):
任务 ID 父任务 ID 任务名称 任务顺序我有这个 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
此查询返回您所期望的按级别排序的所有任务。如何更改它以将结果排序为如下的层次顺序?
- 任务1 -- 任务 1 子任务 1 -- 任务 1 子任务 2 - 任务 2 - 任务 3谢谢。
编辑:答案应该适用于无限数量的关卡。
【问题讨论】:
-
您只是在试验 CTE,还是比直接 SQL 更简单?
-
是的,正在尝试 CTE,但如果有更好的直接 SQL 解决方案,我会使用它..
标签: sql-server-2005 recursion hierarchy common-table-expression