Создание вида дерева - PullRequest
0 голосов
/ 09 мая 2019

Это моя структура таблицы:

 ID       DepNames
    1         Tron
    11         Milk
    31         Books
    101        Letters
    10101      Lights
    21         Ming
    2100       Pool
    2111       Pool2

То, что я хочу получить, это древовидная структура:

 ID               DepNames
    1                  Tron
      11               Milk
        101            Letters
           10101       Lights
    21                 Ming
      2100             Pool
           2111        Pool2
    31                 Books

Возможно ли это с помощью оператора выбора SQL?

1 Ответ

0 голосов
/ 09 мая 2019

Я создал симуляцию вашей проблемы здесь: https://rextester.com/YPFFLT95570

CREATE TABLE Tree (ID INT, DepName VARCHAR(100), Parent_ID INT);

INSERT INTO Tree VALUES
(0,'Root Node',NULL),
(1,'Tron',0),
(11,'Milk',1),
(31,'Books',0),
(101,'Letters',11),
(10101,'Lights',101),
(21,'Ming',0),
(2100,'Pool',21),
(2111,'Pool2',2100);


WITH cte(ID, DepName, Parent_ID, Level, Sort_Order) AS
(
    SELECT ID, DepName, Parent_ID, 0, CAST(ID AS VARCHAR)
    FROM  
    Tree
    WHERE Parent_ID IS NULL

    UNION ALL

    SELECT child.ID, child.DepName, child.Parent_ID, (parent.Level + 1), CAST((parent.Sort_Order + '/' + CAST(child.ID AS VARCHAR)) AS VARCHAR)
    FROM
    Tree child
    INNER JOIN
    cte parent
    ON
    child.Parent_ID = parent.ID
)
SELECT 
REPLICATE(' ',Level - 1) + CAST(ID AS VARCHAR), DepName
FROM cte 
WHERE DepName <> 'Root Node'
ORDER BY Sort_Order;

Честно говоря, я не могу понять причину этого вопроса. Хотя это и является интересной проблемой для игры, лично я считаю, что запросы не предназначены для отступов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...