如何使用CTE从下到上扁平化父子层次结构

问题描述 投票:0回答:1

关于堆栈溢出的第一个问题,我遇到以下问题,我有一个层次结构表,如下所示:

Table TEST

 - [wbe_node_type] [varchar](50) NOT NULL,  /* leaf or expanded */
 - [wbe_node] [varchar](50) NOT NULL,
 - [wbe_node_mask] [varchar](50) NOT NULL,
 - [wbe_description] [varchar](50) NOT NULL,
 - [wbe_parent] [varchar](50) NOT NULL,    
 - [wbe_node_niveau] [int] NOT NULL,        /* level of the record in the hierarchy */

数据如下:

wbe_node_type, wbe_node, wbe_node_mask, wbe_omschrijving, wbe_parent, wbe_node_niveau

expanded, AFCARN0, A-FCARN0, Project 1, [NULL]. 0
leaf, AFCARN04010, A-FCARN0.40.10, Description 2, AFCARN040, 2
expanded, AFCARN040, A-FCARN0.40, Realisatie, AFCARN0, 1

wbe_node_type为“叶子”的行是层次结构中的最低级别,最大深度为8个级别。我想要的是将层次结构从最低层(“叶”节点)到最高层排成一行。

我的想法是开始查找wbe_node_type ='leaf'的所有记录,并找到其上方的所有层。使用临时表很容易做到这一点。但是,我用于查询此数据的工具不适用于临时表。因此,我想使用CTE进行尝试。

[当我在网上查找示例时,这些示例总是从顶部开始,一直到底部。是否可以从最低级别开始从底部填充CTE?

sql sql-server common-table-expression hierarchy
1个回答
0
投票

不是对此有100%的把握,但也许像这样。

SELECT 
*
 FROM TEST l1 
 LEFT JOIN TEST l2 ON l1.wbe_node = l2.wbe_parent
 LEFT JOIN TEST l3 ON l2.wbe_node = l3.wbe_parent
 LEFT JOIN TEST l4 ON l3.wbe_node = l4.wbe_parent
 LEFT JOIN TEST l5 ON l4.wbe_node = l5.wbe_parent
 LEFT JOIN TEST l6 ON l5.wbe_node = l6.wbe_parent
 LEFT JOIN TEST l7 ON l6.wbe_node = l7.wbe_parent
 LEFT JOIN TEST l8 ON l7.wbe_node = l8.wbe_parent

 WHERE 
l1.wbe_node = 'AFCARN0'
© www.soinside.com 2019 - 2024. All rights reserved.