以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  BOM反查时路径相反如何生成目录树  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99855)

--  作者:happyft
--  发布时间:2017/4/27 23:26:00
--  BOM反查时路径相反如何生成目录树
在储存过程中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
--  发布时间:2017/4/27 23:31:00
--  
自己搞定了,把它改一下即可:
CAST(BOM.产品编码 +\'\\\' + c.Path AS VARCHAR(MAX))

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

谢谢!

--  作者:有点色
--  发布时间:2017/4/28 8:59:00
--  

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

 

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