SQL父-子-主祖父母层次结构

SQL父-子-主祖父母层次结构,sql,sql-server,parent-child,hierarchy,Sql,Sql Server,Parent Child,Hierarchy,我有一个名为LIST的表格,格式如下,每一行都标识了父母和孩子。儿童有多个层次 我需要转换此表,并使用下面显示的格式写入新表。为每个名称分配一个唯一的ID,以便可以按如下层次顺序对其进行排序: 有谁能指导我如何以编程方式进行这项工作? 提前感谢您。请尝试此查询 create table hierarchy (Parent varchar(3), child varchar(10)) insert into hierarchy values ('A','AB') ,('A','AC') ,(

我有一个名为LIST的表格,格式如下,每一行都标识了父母和孩子。儿童有多个层次

我需要转换此表,并使用下面显示的格式写入新表。为每个名称分配一个唯一的ID,以便可以按如下层次顺序对其进行排序:

有谁能指导我如何以编程方式进行这项工作? 提前感谢您。

请尝试此查询

create table hierarchy (Parent varchar(3), child varchar(10))

insert into hierarchy values
('A','AB')
,('A','AC')
,('A','AD')
,('A','AE')
,('AB','ABC')
,('AB','ABD')
,('AB','ABE')
,('ABC','ABCD')
,('ABC','ABCE')
GO

; WITH cte_Hierarchy
AS
(
SELECT 
    ROW_NUMBER() OVER (ORDER BY [name]) Id
    , t.[name]
FROM(
    SELECT Parent [name] FROM hierarchy t
    UNION
    SELECT child FROM hierarchy t
)t
)
SELECT t.Id
        , t.[name]
        , h.Parent
        , p.Id ParentId
FROM cte_Hierarchy t
LEFT JOIN hierarchy h ON h.child = t.[name]
LEFT JOIN cte_Hierarchy p on p.[name] = h.Parent