Древовидный вывод MS SQL

Id Parent IndexNumber Name
44161 NULL 0 Задача1
44162 44161 0 Задача1Подзадача1
44163 44161 1 Задача1Подзадача2
44164 NULL 1 Задача2
44165 44164 0 Задача2Подзадача1
44166 44165 0 Задача2Подзадача1Подподзадача1

Microsoft SQL Server 2012 (SP4-GDR) (KB4583465) - 11.0.7507.2 (X64) Nov 1 2020 00:48:37 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.2 (Build 9200: ) (Hypervisor)

Сейчас запрос, без каких-либо изменений, выводит нужные столбцы. Есть ли способ пронумеровать древовидный вывод.

Ожидаемый результат:

Num Id Parent IndexNumber Name
1 44161 NULL 0 Задача1
1.1 44162 44161 0 Задача1Подзадача1
1.2 44163 44161 1 Задача1Подзадача2
2 44164 NULL 1 Задача2
2.1 44165 44164 0 Задача2Подзадача1
2.1.1 44166 44165 0 Задача2Подзадача1Подподзадача1

Ответы (1 шт):

Автор решения: Akina
WITH
cte1 AS (
    SELECT Id, Parent, IndexNumber, Name, 
           ROW_NUMBER() OVER (PARTITION BY Parent ORDER BY Id) rn
    FROM test
),
cte2 AS (
    SELECT Id, Parent, IndexNumber, Name, rn,
           CAST(rn AS NVARCHAR(MAX)) Num
    FROM cte1
    WHERE Parent IS NULL
  UNION ALL
    SELECT cte1.Id, cte1.Parent, cte1.IndexNumber, cte1.Name, cte1.rn,
           CONCAT(cte2.Num, '.', cte1.rn)
    FROM cte2
    JOIN cte1 ON cte2.Id = cte1.Parent
)
SELECT Num, Id, Parent, IndexNumber, Name
FROM cte2;

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=0411ec8cc7bfa4afc504d1f522b5b69d

→ Ссылка