我有两个表跟踪零件编号以及装配体的层次结构。
表:配置
ConfigNum AssemblyNum Qty
1 A 1
1 B 2
1 C 2
2 A 1
2 C 1
表:SubAssembly
SubAssembly PartNum Qty
A AA 2
A BB 4
A CC 2
A DD 4
B EE 4
B FF 8
AA AAA 2
我想创建这些表的平面版本,其中显示了ConfigNum
(顶级父级)以及Config表中每个ConfigNum
的所有关联程序集和部件号。列Config.AssemblyNum
相当于SubAssembly.SubAssembly
。
答案 0 :(得分:0)
对于这个问题,我认为你必须使用递归查询。事实上,我认为SubAssembly表应该有一些除SubAssembly之外的ProductID字段,以便轻松识别包含程序集的主要产品。
您可以在SLQ Server文档中找到类似的示例。
可在此处查看:http://rextester.com/FQYI80157
更改Config表中的数量以更改最终结果。
create table #t1 (cfg int, part varchar(10), qty int);
create table #t2 (part varchar(10), sasm varchar(10), qty int);
insert into #t1 values (1,'A',2);
insert into #t2 values ('AA','AAA',2),('A','AA',2),('A','BB',4),('A','CC',2),('A','DD',4);
WITH cte(sasm, part, qty)
AS (
SELECT sasm, part, qty
FROM #t2 WHERE part = 'A'
UNION ALL
SELECT p.sasm, p.part, p.qty * pr.qty
FROM cte pr, #t2 p
WHERE p.part = pr.sasm
)
SELECT #t1.cfg, cte.part, cte.sasm, SUM(cte.qty * COALESCE(#t1.qty,1)) as total_quantity
FROM cte
left join #t1 on cte.part = #t1.part
GROUP BY #t1.cfg, cte.part, cte.sasm;
结果如下:
+---+------+------+------+----------------+
| | cfg | part | sasm | total_quantity |
+---+------+------+------+----------------+
| 1 | NULL | AA | AAA | 4 |
| 2 | 1 | A | AA | 4 |
| 3 | 1 | A | BB | 8 |
| 4 | 1 | A | CC | 4 |
| 5 | 1 | A | DD | 8 |
+---+------+------+------+----------------+