Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Sortierhierarchie aus rekursiven Abfrageergebnissen in SQL 2005

Eine Möglichkeit, dies zu tun, besteht darin, eine Hierarchiespalte hinzuzufügen, die alle vorherigen IDs in einer Liste enthält:

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

Beachten Sie, dass davon ausgegangen wird, dass TaskId eine zeichenfolgenbasierte ID ist. Wenn nicht, sollten Sie es in ein Varchar umwandeln, bevor Sie es verketten.