Foxtable(狐表)用户栏目专家坐堂 → BOM反查时路径相反如何生成目录树


  共有2033人关注过本帖树形打印复制链接

主题:BOM反查时路径相反如何生成目录树

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
BOM反查时路径相反如何生成目录树  发帖心情 Post By:2017/4/27 23:26:00 [只看该作者]

在储存过程中BOM表中反查是,因为是从子件开始递归查找其所有主件,直到最顶层,但生成的路径path列的值如下
path
C010100108\C03CF15901\B0101002
C010100108\C03CF15901\B03CF159

前面左边一个刚好是子件,向右才是其主件,要如何才能将其颠倒过来方便生成目录树即变成
B0101002\C03CF15901\C010100108
B03CF159\C03CF15901\C010100108

还是说递归时可以直接生成从父件到主件的路径,应该是不可以
储存过程的代码如下
BEGIN
    WITH CTE
    AS (
       SE LECT 产品编码,
           品名,
           父件编码,
           用量,
           计量单位,
           0 AS Levle,
           Path=CAST(产品编码 AS VARCHAR(MAX)) 
       FROM BOM
       WHERE 产品编码 LIKE '%' + @whereflt + '%' --父件编码 is null  
       UNION ALL
       SE LECT BOM.产品编码,
           BOM.品名,
           BOM.父件编码,
           BOM.用量,
           BOM.计量单位,
           c.Levle + 1 AS Levle,
           CAST(c.Path +'\'+BOM.产品编码 AS VARCHAR(MAX))
       FROM CTE AS c
           INNER JOIN BOM
               ON c.父件编码 = BOM.产品编码  
       )
    SE LECT *
    FROM CTE
    ORDER BY 父件编码;
END;

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/27 23:31:00 [只看该作者]

自己搞定了,把它改一下即可:
CAST(BOM.产品编码 +'\' + c.Path AS VARCHAR(MAX))

但是有个问题不知道怎么弄,就是由子件向上查时,因为不知道有多少层,所以子件为0层的话,主件层数难道只能显示为-1,-2,-3这样吗?
往下查是主件为0,子件层数为1,2,3...没问题.

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/28 8:59:00 [只看该作者]

回复2楼,没看懂你的意思。向上查的时候,如果没有父件,就停止,往下查,就是循环所有的子件就停止。

 

做具体实例说明你的问题。


 回到顶部