树形结构查询的2种问题
金融机构中存在大量的金融产品,这些产品有很多级层次关系。形成了树形的结构。以往这种树形结构的存储方式采用PARENT_NODE的方式进行存储,可以利用oracle的递归函数查询一个节点的所有上级或者下级节点。
数据示意图如下:
问题1:树形结构的层级关系不定,对任意级别的节点进行树形结构的汇总。如对A、B、C节点进行汇总数据,但是选择A、B、C不定所以不能把sql写死,比如先汇总C再汇总B。可以利用oracle的CONNECT_BY_ROOT,得到每个节点的根节点,这样就可以按照root节点进行group by了。
select level, connect_by_root parent,child, parent from hier
start with id='B'
connect by prior hier.child = parent;
问题2:对各级树形结构的节点需要进行汇总,通常见于机构的汇总中
可以先排序根据level,先汇总C节点,然后再汇总B、A然后是ROOT。
当汇总ROOT的时候它的子节点都已经汇总完毕了。