sql >> Base de Datos >  >> RDS >> Sqlserver

Jerarquía de pedidos a partir de resultados de consultas recursivas en SQL 2005

Una forma de hacerlo es agregar una columna de jerarquía que tenga todos los ID anteriores en una lista:

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

Tenga en cuenta que esto supone que TaskId es un ID basado en cadenas. De lo contrario, debe convertirlo en un varchar antes de concatenarlo.