1

我必须获得 1 级部分的子部分的限制列表。某些部件的限制为空,对于那些空部件,我必须查询该部件上的 2 级部件并给出这些 2 级部件的限制的最小值。对于某些 2 级零件,我必须获取子零件的 MIN(该 2 级零件上的 3 级零件)并将其汇总到 2 级聚合。

你的方法是什么?

在写这篇文章时,我意识到我可以过滤掉被清空的 1 级部分,并使用一个查询来合并它,该查询对被清空的 1 级部分进行聚合,但我想确保没有更好的解决方案。我想我觉得我最初给出的查询有点像鸽子,它给出了整个树(使用 START WITH 和 CONNECT BY 将较低级别的部分连接到较高级别的部分),我试图通过聪明的方式压缩它SQL,但我不能。此外,我希望查询使用 n 级别的聚合,而不是基于我想要复制粘贴我的 UNION 和子查询的次数的有限数量。

这必须在 SQL 中完成。我不能使用 PL/SQL。

为简单起见,请考虑如下架构:

Assembly table
level1_serial | level2_serial
-----------------------------
1234          | null
123           | 1
123           | 2
123           | 3

Limit table
part_serial | limit 
-------------------
1234        | 1000
123         | null
1           | 500
2           | 400
3           | 600

在这种情况下,我需要返回两条记录,如下所示

part_serial | limit
-------------------
1234        | 1000
123         | 400
4

1 回答 1

1

尝试这个:

SELECT
    PART_SERIAL,
    MIN(LIMIT)
FROM (    
    SELECT 
        NVL(PRIOR LIMIT.PART_SERIAL, LIMIT.PART_SERIAL) PART_SERIAL,
        LIMIT.LIMIT LIMIT,
        LEVEL
    FROM 
        LIMIT
    CONNECT BY PRIOR 
        LIMIT IS NULL AND 
        PRIOR PART_SERIAL <> PART_SERIAL AND 
        INSTR(PRIOR PART_SERIAL, PART_SERIAL) > 0 AND LEVEL < 10
)
GROUP BY PART_SERIAL;

它可以完成这项工作,但它会返回更多结果,因此您必须进行过滤。

于 2011-11-14T07:46:25.290 回答