Как выбрать дерево из нескольких столбцов - PullRequest
0 голосов
/ 25 июня 2018

Есть такие данные

DECLARE @tbl TABLE (name1 varchar(5),name2 varchar(5),name3 varchar(5))
INSERT INTO @tbl(name1,name2,name3) 
values ('P1','A1','AA1'),('P1','B1','AA2'),('P1','C1','AA3'),('P1','A1','AA4')

Таблица ввода:

name1   name2   name3
P1        A1    AA1
P1        B1    AA2
P1        C1    AA3
P1        A1    AA4

Я хочу выбрать из этого немного странного дерева, результат должен быть таким:

col1    col2
 P1      A1
 A1      AA1
 A1      AA4
 P1      B1
 B1      AA2
 P1      C1
 C1      AA4

Пример для первых строк 'P1','A1','AA1' P1 является корнем для A1, A1 является корнем для AA1, но A1 является корнем для AA4 в 'P1','A1','AA4'. Поэтому выходные данные должны быть как:

P1      A1
A1      AA1
A1      AA4

Sqlfiddle: http://www.sqlfiddle.com/#!18/87eb3/1

1 Ответ

0 голосов
/ 25 июня 2018

Возможно, что-то вроде этого, то, что вы ищете:

SELECT col1, col2
FROM 
(
    SELECT name2 AS child, 0 AS type, name1 AS col1, name2 AS col2
    FROM @tbl

    UNION 

    SELECT name2 AS child, 1 AS type, name2 AS col1, name3 AS col2
    FROM @tbl
) AS t
ORDER BY child DESC, type, col1, col2

Пример вывода:

col1    col2
------------
P1      C1
C1      AA3
P1      B1
B1      AA2
P1      A1
A1      AA1
A1      AA4
...