如何在 SQL Server 中形成 Management Hierarchy Formation?

问题描述

如何形成以下记录的管理层次?

输入数据:

ID 子ID 姓名 说明
101 NULL 页面参考 页面参考
102 1 第 1 页 第 1 页
103 2 阿肖克 阿肖克
104 3 库马尔 库马尔
105 4 第 2 页 第 2 页
106 5 阿文德 阿文德
107 4 第 11 页 第 11 页
108 6 政府 政府
109 7 格库尔 格库尔
110 8 坎南 坎南

我尝试使用递归 CTE,但找不到确切的解决方案。需要以下格式, 条件是

New Leaf ID --> If Sub ID IS NULL,then it will be 1,If contains page row,it will be 2,if contains other than that it will be 3.

Page --> Whenever Page row starts,from the next row original information showing for that page. we need to form based on the lead rows. 

输出数据:

ID 子ID 姓名 页面 新叶 ID
101 NULL 页面参考 1
102 1 第 1 页 第 1 页 2
103 2 阿肖克 第 1 页 3
104 3 库马尔 第 1 页 3
107 4 第 11 页 第 11 页 2
108 6 政府 第 11 页 3
109 7 格库尔 第 11 页 3
110 8 坎南 第 11 页 3
105 4 第 2 页 第 2 页 2
106 5 阿文德 第 2 页 3

解决方法

新的叶子id是条件逻辑。至于页面,则有点棘手:行的顺序似乎定义了依赖关系,因此基本上您希望将每个第 3 级叶与前一个第 2 级相关联。

这是一种使用窗口计数来识别属于同一页面的叶子的方法:

select id,subid,name,case when sub_id is not null
        then max(case when name like 'Page %' then name end) over(order by id) 
    end as page,case 
        when subid is null then 1
        when name like 'Page %' then 2
        else 3
    end as new_leaf_id
from (
    select t.*,sum(case when name like 'Page %' then 1 else 0 end) over(order by id) grp
    from mytable t
) t