关键词搜索

源码搜索 ×
×

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

发布2020-12-21浏览1770次

详情内容

  1. /*
  2. 思路说明:
  3. 1 展开多层次bom就需要用循环的方法展开,sqlserver中2005版本后就有了递归的查询with
  4. 2 要让sql查询出来的结果有像树装结构一样的效果,就需要有层级level,如果没有lever就要计算出一个level来,需要用加空格的方式来实现层级样式
  5. 3 需要父子关系的要在一起就一定得要按层级的顺序来排序ordby,所以我先对顶层的加一个顺序号,先按顶层的排序;
  6. 然后再加上各父子bom的关系建立路径bom_path(一定要父子子父的串在一起),这样按它进行排序父子关系的就排在一起了。
  7. */
  8. WITH tree as(
  9. 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)
  10. FROM TF_BOM
  11. where BOM_NO='20S042903->01'
  12. union all
  13. 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
  14. FROM tree inner join TF_BOM b on tree.ID_NO=b.BOM_NO
  15. )
  16. SELECT REPLICATE(SPACE(1),LEV*10) + BOM_NO AS BOM_Tree, *
  17. FROM tree
  18. order by ordby,tree.BOM_PATH,tree.lev
  19. OPTION (MAXRECURSION 0);

查询结果示例:

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载