/*
思路说明:
      1 展开多层次bom就需要用循环的方法展开,sqlserver中2005版本后就有了递归的查询with
      2 要让sql查询出来的结果有像树装结构一样的效果,就需要有层级level,如果没有lever就要计算出一个level来,需要用加空格的方式来实现层级样式
	  3 需要父子关系的要在一起就一定得要按层级的顺序来排序ordby,所以我先对顶层的加一个顺序号,先按顶层的排序;
	    然后再加上各父子bom的关系建立路径bom_path(一定要父子子父的串在一起),这样按它进行排序父子关系的就排在一起了。
*/
WITH tree as(
SELECT BOM_NO,ID_NO,BOM_PATH=cast(BOM_NO+ISNULL(ID_NO,'') as varchar(1000)),NAME,PRD_NO,QTY,CST,lev=0,ordby=ROW_NUMBER() OVER(ORDER BY BOM_NO)
FROM TF_BOM
where BOM_NO='20S042903->01'
union all
SELECT  B.BOM_NO,B.ID_NO,BOM_PATH=CAST(tree.BOM_PATH+'/'+b.bom_no+'/'+isnull(b.id_no,'') as varchar(1000)),B.NAME,B.PRD_NO,B.QTY,B.CST,LEV=tree.LEV+1,ordby=tree.ordby
FROM tree inner join TF_BOM b on tree.ID_NO=b.BOM_NO
)
SELECT REPLICATE(SPACE(1),LEV*10) + BOM_NO AS BOM_Tree, * 
FROM tree
order by ordby,tree.BOM_PATH,tree.lev
OPTION (MAXRECURSION 0);

查询结果示例:

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐