Древовидный вывод 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