Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ordinare la gerarchia dai risultati di query ricorsive in SQL 2005

Un modo per farlo è aggiungere una colonna della gerarchia che abbia tutti gli ID precedenti in un elenco:

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

Si noti che ciò presuppone che TaskId sia un ID basato su stringa. In caso contrario, dovresti lanciarlo su un varchar prima di concatenarlo.