数据库操作之——二维表如何按树状展开

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

数据库操作之——二维表如何按树状展开

场景是这样子的,进入星空,我们看到功能是这样分布的:

领域-模块-功能分组-功能,那么我们要如何获得这个功能分布的树状图呢?

第一步:获取所有功能及功能所属分组、所属模块、所属领域

--二维表数据
select ROW_NUMBER() over (order by  g2.FSEQ,f.FSEQ,c2.FSEQ,c.fname,a.FSEQ)*10 fseq, g.FNAME FNAME1, e.FNAME FNAME2,c.FNAME FNAME3,b.FNAME FNAME4
into #tmp001
from T_META_CONSOLEDETAIL a  join T_META_CONSOLEDETAIL_L b on a.FDETAILFUNCID=b.FDETAILFUNCID and  FLOCALEID=2052 
join T_META_CONSOLESUBFUNC_L c on c.FLOCALEID=2052 and a.FSUBFUNCID=c.FSUBFUNCID
join T_META_CONSOLESUBFUNC c2 on c.FSUBFUNCID=c2.FSUBFUNCID
join T_META_OBJECTTYPE d on a.FOBJECTID=d.FID
join T_META_SUBSYSTEM_L e on d.FSUBSYSID=e.FID and e.FLOCALEID=2052 
join  T_META_SUBSYSTEM f on e.FID=f.FID 
join T_META_TOPCLASS_L g on  f.FTOPCLASSID=g.FTOPCLASSID
join T_META_TOPCLASS g2 on g.FTOPCLASSID=g2.FTOPCLASSID
order by g2.FSEQ,f.FSEQ,c2.FSEQ,c.FNAME,a.FSEQ
select * from  #tmp001 order by fseq

结果如图:

image.webp

第二步:转换方案

按照树形图的方式,应该是这样子的展示方式:

财务会计

     总账

           基础资料

                  促销费用项目

            总账工作台

                  总账数字看板

                   总账初始化指引工作台

             凭证管理

                   ......

即fname1、fname2、fname3、fname4按特定顺序排列。

第一个想法是按照游标进行处理,按顺序遍历每一行,使用八个变量,分别存储最新行的fname和上一行的fname。每一次遍历,从fname1对应的变量开始比较,当前行fname1和上一行fname1不同,则写入fname1和后面的fname2、fname3、fname4,如果当前行fname1和上一行fname1相同,则比较fname2,处理方式类似fname1,直到比较完fname4。

感觉实现很麻烦,换种方式。

第二种想法是按层次插入。

一上面临时表#tmp001为基础,第四列就是我们要的数据,目前只有最明细的功能。

对 FNAME1,FNAME2,FNAME3进行分组,将分组后的fname3结果插入进去,同时确保新插入#tmp001的序号fseq小于分组中最小序号,这样fname3作为分组就会排在该分组的fname4的前面;fname2,fname1以此类推。

这样不要简单太多!

第三步:处理fname3

  --填充fname3
  insert into #tmp001(fseq,FNAME1,FNAME2,FNAME3,FNAME4)
  select min(fseq)-1 fnewseq, FNAME1,FNAME2,FNAME3,'【三级标题】'+FNAME3  from  #tmp001 group by FNAME1,FNAME2,FNAME3
  order by fnewseq
  select * from  #tmp001 order by fseq

结果如图:关注fname4列,是我们的目标数据,结果符合预期

1662190258000.webp

第四步:处理fname2、fname1

  --填充fname2
  insert into #tmp001(fseq,FNAME1,FNAME2,FNAME3,FNAME4)
  select min(fseq)-1,FNAME1,FNAME2,'','【二级标题】'+FNAME2  from  #tmp001 group by FNAME1,FNAME2  
  --填充fname1
  insert into #tmp001(fseq,FNAME1,FNAME2,FNAME3,FNAME4)
  select min(fseq)-1,FNAME1,'','','【一级标题】'+FNAME1  from  #tmp001 group by FNAME1
  select * from  #tmp001 order by fseq

image.webp

结果就出来了


数据库操作之——二维表如何按树状展开

场景是这样子的,进入星空,我们看到功能是这样分布的:领域-模块-功能分组-功能,那么我们要如何获得这个功能分布的树状图呢?第一步:获取...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息