Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ordenando hierarquia de resultados de consulta recursiva no SQL 2005


Uma maneira de fazer isso é adicionar uma coluna de hierarquia que tenha todos os IDs anteriores em uma 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

Observe que isso pressupõe que TaskId é uma identificação baseada em cadeia de caracteres. Caso contrário, você deve convertê-lo em um varchar antes de concatená-lo.