gpt4 book ai didi

sql-server-2005 - 在SQL 2005中从递归查询结果排序层次结构

转载 作者:行者123 更新时间:2023-12-04 07:03:02 24 4
gpt4 key购买 nike

我有一个带有以下各列的“任务”表(TaskOrder用于在父级而不是整个表的范围内对子级进行排序):

TaskIdParentTaskIdTaskNameTaskOrder

I've got this CTE query to return all the rows:

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

谢谢。

编辑:答案应该使用无数级。

最佳答案

一种执行此操作的方法是添加一个层次结构列,该列在列表中具有所有先前的ID:

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

请注意,这假定TaskId是基于字符串的ID。如果不是,则应在连接之前将其强制转换为varchar。

关于sql-server-2005 - 在SQL 2005中从递归查询结果排序层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/539155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com