Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Hiérarchie de classement à partir des résultats de requêtes récursives dans SQL 2005

Une façon de procéder consiste à ajouter une colonne hiérarchique contenant tous les ID précédents dans une liste :

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

Notez que cela suppose que TaskId est un ID basé sur une chaîne. Sinon, vous devez le convertir en varchar avant de le concaténer.