私は最近 SQL の独学を始めたばかりで、さまざまなチュートリアルから必要なものをほぼすべてまとめることができましたが、これには頭を壁にぶつけてしまいます。製品のすべての部品表情報を含むテーブルがあります。PPN_I、CPN_I、QUANTITY_I、BOMNAME_I の 4 つの列だけが必要です。これらは、それぞれアイテム番号、原材料番号、数量、および BOMName です。多くの BOM にはサブアセンブリが含まれています。レベルに関係なく、BOM のすべてのコンポーネントをリストする結果セットが必要です。再帰クエリを使用する必要があると確信していますが、それを取得することはできず、助けていただければ幸いです。他にも BOM に関する質問がいくつかあることは知っていますが、それらはすべて異なるテーブル構造を持っているようです。そう -
まず、推測とチェック作業を容易にするために、特定の 1 つの項目の結果を取得しようとしました。完了したら、すべてのアイテムのレポート、または少なくともアイテムのリストが必要になります。これらのアイテムの多くは構成可能で、複数の BOM があります。デフォルトのセットアップを取得するために、空の BOM 名を探しています。
これを実行して、最初のレベルを取得できます。
select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
from BM010115 bm
where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
問題は、行の 1 つ (または複数) がサブアセンブリである cpn_i 値を持つことです。サブアセンブリを構成する要素を確認するには、最初のクエリの各結果を同じクエリに戻す必要があります。
select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 2 as BOMLevel
from BM010115 bm
where bm.PPN_I like 'ZC-BASESUBLIM' and bm.BOMNAME_I like ''
明らかに、これはこれを行う最も効果的な方法ではありません。試してみましたが、正しい結果が得られないようです。私はこれについてさまざまなバージョンを試してきましたが、最近行った/最も近いものを以下に示します。
With BMStudy as
(select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
from BM010115 bm
where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
UNION ALL
select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, 2 as BOMLevel
from BM010115 bb, BMStudy ba
where bb.BOMNAME_I like '' and ba.PPN_I = bb.CPN_I)
select * from BMStudy
これは、結果の最初のレベルのみを返します。BOM の深さが 3 レベルを超えるとは思いませんが、それがどのレベルであるかを示す列が必要です。誰かが私を正しい方向に向けたり、どこが間違っていたのかを教えてくれますか?
TL;DR - BOM 内のすべてのコンポーネントを取得し、最初のクエリのすべての結果の BOM コンポーネントを取得して結果セットに追加するクエリが必要です。
ありがとう