【发布时间】:2019-09-03 10:05:37
【问题描述】:
我正在处理一个试图计算递归物料清单的 Oracle 数据库实例。
我的数据集如下所示(还有一些我并不真正需要的附加功能):
| Root_Part_No | Sub_Part_No | Sub_Part_Quant |
|--------------|-------------|----------------|
| 132EER | 122FYY | 4 |
| 132EER | 766WWW | 2 |
| 132EER | 001EWW | 1 |
| 132EER | 472WQA | 1 |
| 132EER | 632OIR | 1 |
| 132EER | 874RTG | 1 |
| 132EER | 888III | 10 |
| 132EER | 235CVV | 5 |
我可以使用以下查询很好地计算一级 BOM:
SELECT
Root_Part_No,
TRIM(Sub_Part_No) AS "Part",
Sub_Part_Qty
FROM
TblBOM
WHERE
Root_Part_No LIKE "132EE%"
AND isEmptyInd != 'Yes'
ORDER BY Root_Part_No, Sub_Part_Qty;
但是,我需要完成的是能够随后计算为我输入的项目返回的每个 Sub_Part_No 的 BOM,最终得到一个如下所示的表:
| Root_Part_No | Sub_Part_No | Sub_Part_Quant |
|--------------|-------------|----------------|
| 132EER | 122FYY | 4 |
| 132EER | 766WWW | 2 |
| 132EER | 001EWW | 1 |
| 132EER | 472WQA | 1 |
| 132EER | 632OIR | 1 |
| 132EER | 874RTG | 1 |
| 132EER | 888III | 10 |
| 132EER | 235CVV | 5 |
| 122FYY | 849ZXA | 2 |
| 122FYY | 990JUI | 10 |
| 122FYY | 211EEW | 5 |
| 122FYY | 211VVV | 2 |
| 766WWW | 001EWW | 10 |
| 766WWW | 176LKJ | 2 |
...etc
我尝试了以下两种资源:
我对@987654330@ 第二部分的join 部分感到困惑。
感谢您在前进的道路上提供任何帮助。
使用 RPL 作为 (
选择 Root_Part_No,TRIM(Sub_Part_No)作为“零件”,Sub_Part_Qty
来自 TblBOM
WHERE Root_Part_No LIKE "132EE%" AND isEmptyInd != 'Yes'
UNION ALL
SELECT Root_Part_No, TRIM(Sub_Part_No) AS "Part", Sub_Part_Qty
FROM TblBOM
LEFT JOIN -- I am confusion
)
SELECT DISTINCT -- I am also confusion
【问题讨论】:
-
您使用的是什么版本的 Oracle?
-
我的驱动程序是 12c,所以我不确定这是否有帮助。我说不出来。如果有帮助,我正在使用 SQL Developer 查询实例。
-
如果一个部件需要 x2 子部件,那么该子部件需要 x3,那么……它仍然是 x3 子部件,还是 x6?
-
我想“数量”是指构建当前在
Root_Part_No列出的部件所需的数量。从本质上讲,我认为这是使用我对来自该查询的第一个实例的每个部件号的单级查询的问题。我知道这是递归,但我不知道该怎么做。 -
您是否需要此查询一直递归到所需的基本部分,还是只需要您列出的示例中的那个级别?我问是因为使用示例中的查询找到的部分也可能有子部分。
标签: sql oracle recursion oracle12c