回答

收藏

我如何从物料清单表中获取递归数据

技术问答 技术问答 240 人阅读 | 0 人回复 | 2023-09-12

这是在SQL Server 2008中。1 v5 q' @& N3 [  F2 n  x
我计划创建两个表来代表材料清单。项目负责人将有以下数据:
- r' H: b& P; |! {0 |+ B: f[ID] [项目代码] [项目说明]1 ---- A001 ----组装1
, i9 Y% r& q6 x6 E# Y3 O2 R/ m0 {- m2 ---- B001 ----组装1(组装1的孩子)+ i: O, H. i1 G
3 ---- B002 ----组装2(组装1的孩子)8 e7 m. k/ W/ i
4 ---- C001 ----组件1(子组件1)1 `) D% |) C; W
子代)5 ---- C002 ----组件2(子组件2的子代)
/ j8 J2 w, K7 s1 R3 m: c7 T+ EBOM表关系表将有以下数据[父项ID]和[子项ID]是项主文件的外键。-# A7 D7 D7 y; j7 }( ^
[ID] [父项ID] [子项ID]1 ---- 1 ---- 28 c+ v! A8 L% P% {$ K
2 ---- 1 ---- 3  ?( a7 Q' x4 s" l7 w) S( j1 _
3 ---- 2 ---- 41 x) P, w& t9 a7 z3 @5 i) c
4 ---- 3 ---- 53 {% q# t( i- w9 \
所以第一个表只包含项目本身,另一个表在哪里?ID和哪个子ID方面有关系。
; O( y6 o8 j! @3 K0 `3 A5 B考虑到它可能不得不根据上表中添加的数据进行递归迭代,提取Assembly(A001)所有子项SQL可能是什么?6 A! v5 o1 e: T
因此,对于上述数据,我应:-7 R. n/ r9 P  `; m
1)A001                                                                .1) B001                               .1.1)C001               .2) B002                                 .2.1) C002谢谢,泽
! X6 S0 m6 d7 b6 ^9 g                                                               
  P0 }6 K  P4 V- {5 D. c    解决方案:                                                                # O$ V; w& B2 g3 e% Q
                                                                使用递归CTE。例如:
* ~. Q6 Q  G2 |& }- IWITH BomTree (ID,Level,[Item Code],[Item Description],Depth)AS(-- Anchor member definition    SELECT m.*,0 AS Depth    FROM dbo.Master AS m    WHERE m.[ID] =    UNION ALL-- Recursive member definition    SELECT m.*,t.Depth   1 AS Depth    FROM dbo.Master AS m    INNER JOIN dbo.BOM AS b        ON m.[ID] = b.[Child Item ID]    INNER JOIN BomTree AS t        ON b.[Parent Item ID] = t.ID)-- Statement that executes the CTESELECT * FROM BomTree;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则