sqlserver中一条sql查询语句无限级的展开多级子 bom算法示例

/*
思路说明:
      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);

查询结果示例:

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值