質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

2970閲覧

oracle SQLにて、部品表の作成

hk3150

総合スコア11

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/10/11 02:30

前提・実現したいこと

サンプルテーブルから、子部品を全て展開した状態にしたいです。

サンプルテーブル

親部品子部品生産場所
タイヤ中国
タイヤバルブ中国
バルブキャップ中国
バルブシール中国
バルブバルブコア中国
キャップゴム中国

SQL取得結果として、下記のような半ストラクチャー状態にしたいと考えています。

親部品中間完成品子部品2生産場所
タイヤバルブ中国
タイヤキャップ中国
タイヤシール中国
タイヤバルブコア中国
タイヤゴム中国

該当のソースコード

with BOM(親品番,子品番,生産場所)
as (select 親品番,子品番,生産場所 from サンプルテーブル)

select *
from BOM
left outer join サンプルテーブル ON サンプルテーブル.親品番 = BOM.子品番
where 親品番 like '車'

試したこと

該当のソースコードから、似たようなものを作成できましたが、
サンプルコードでいうバルブまでしか取得できませんでした・・。
バルブを更に展開した状態、キャップやシールといった部品も取得できるようにしたく思います。

方法が思いつかないものですから、
何か良い方法がございましたらご教示頂きたく、よろしくお願いいたします。
階層は最大5Lvと仮定しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neko_the_shadow

2021/10/11 04:55

中間完成品の要件はどのようなものですか? たとえば車の直下にある部品を中間完成品と呼んでいますか? バルブやキャップは中間完成品になりますか?
hk3150

2021/10/11 06:53

neko_the_shadow様 ご連絡ありがとうございます。 車の直下にある部品を中間完成品と呼んでいます。 BAに選ばせて頂きましたsazi様の回答にて無事解決に至りました。 この度は、私の為にお時間を使って頂きまして、ありがとうございました。
guest

回答1

0

ベストアンサー

再帰になっていませんので当然ですね。

SQL

1with bom(親品番, 子品番, 生産場所, 親部品, 中間完成品, lvl) as ( 2 select 親品番,子品番, 生産場所 , 親品番 as 親部品, 子品番 as 中間完成品, 1 3 from sample 4 where 親品番 like '車' 5 union all 6 select s.親品番, s.子品番, s.生産場所, b.親部品, b.中間完成品, b.lvl+1 7 from bom b inner join sample s 8 on b.子品番=s.親品番 9) 10select 親部品, 中間完成品, 子品番, 生産場所 11from bom 12where lvl > 1

因みに、階層のパンくずを表示するとしたら以下になります。

SQL

1with bom(親品番, 子品番, 生産場所, 親部品, 中間完成品, 階層, lvl) as ( 2 select 親品番,子品番, 生産場所 , 親品番 as 親部品, 子品番 as 中間完成品 3 , 親品番 || ' > ' || 子品番, 1 4 from sample 5 where 親品番 like '車' 6 union all 7 select s.親品番, s.子品番, s.生産場所, b.親部品, b.中間完成品 8 , 階層 || ' > ' || s.子品番, b.lvl+1 9 from bom b inner join sample s 10 on b.子品番=s.親品番 11) 12select 親部品, 中間完成品, 子品番, 生産場所, 階層 13from bom 14where lvl > 1

投稿2021/10/11 04:39

編集2021/10/11 07:07
sazi

総合スコア25206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hk3150

2021/10/11 06:51

sazi様 ご教示頂きましたソースコードにて、無事できました; いつもありがとうございます(_ _)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問