1

レベル 1 パーツのサブパーツの制限のリストを取得する必要があります。一部のパーツの制限は null であり、それらの null パーツについては、そのパーツにあるレベル 2 パーツを照会し、それらのレベル 2 パーツの制限の MIN を指定する必要があります。一部のレベル 2 パーツについては、サブパーツ (そのレベル 2 パーツのレベル 3 パーツ) の MIN を取得し、それをレベル 2 集計にロールアップする必要があり ます

あなたのアプローチは何ですか?

これを書いているときに、null レベル 1 の部分をフィルターで除外し、null レベル 1 の部分の集計を行うクエリで UNION できることに気付きましたが、これ以上の解決策がないことを確認したいと思います。最初に与えられたツリー全体を与えるクエリ (START WITH と CONNECT BY を使用して、下位レベルのパーツが上位レベルのパーツに結合された) に少し鳩の穴が開いたように感じたので、巧妙に圧縮しようとしました。 SQL、しかしできませんでした。また、UNION とサブクエリをコピー アンド ペーストする回数に基づく有限数ではなく、クエリが n レベルの集計で機能するようにしたいと考えています。

これは 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

この場合、次のように 2 つのレコードを返す必要があります。

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 に答える