質問 |
||
| QNo.3497835 | 複数の表を一つにしたい | |
|---|---|---|
| 質問者:kazuo1969 |
Oracle7で以下のような要求にあうようなSQLは可能でしょうか? 見積データ データNO 品目 金額 1 ああ 1O 2 いい 11 3 うう 12 受注データ データNO 品目 金額 2 いい 11 3 ええ 13 4 おお 14 納品データ データNO 品目 金額 3 かか 15 4 おお 14 5 きき 16 上記のような3つのテーブルがあります。 データNOは、見積データ作成時に連番になり、受注、納品のデータNOはその番号を引き継ぎます。 ところが、受注データからしか発生しないデータもあり、同様に納品データから発生する場合もあります。 (ちゃんと見積もりしてから受注して納品ではなく、いきなり受注したり納品したりする場合があるので) また、見積時とは明細がことなる場合もあります。 データNOでそれらを追いたいので、この3つの表を以下のような結果にしたいのです。 結果テーブル データNO 見積品目 見積金額 受注品目 受注金額 納品品目 納品金額 1 ああ 10 2 いい 11 いい 11 3 うう 12 ええ 13 かか 15 4 おお 14 おお 14 5 きき 16 レイアウトや説明がわかりずらいかと思いますが、よろしくお願いします。 |
|
困り度:
|
||
| 質問投稿日時: 07/11/07 18:44 |
||
回答良回答20pt |
|
| ANo.1 | 古いオラクルだと、こんな感じで書くのが良いでしょう。 --外部結合による解決 select x.データNO,a.品目,a.金額,b.品目,b.金額,c.品目,c.金額 from 見積 a,受注 b,納品 c, (select データNO from 見積 union select データNO from 受注 union select データNO from 納品) x where x.データNO=a.データNO(+) and x.データNO=b.データNO(+) and x.データNO=c.データNO(+); --外部結合を使わない解決 select データNO, max(decode(K,1,品目,null)),max((decode(k,1,金額)), max(decode(K,2,品目,null)),max((decode(k,2,金額)), max(decode(K,3,品目,null)),max((decode(k,3,金額)) from (select 1 as k,a.* from 見積 a union all select 2 as k,b.* from 受注 b union all select 3 as k,c.* from 納品 c) group by データNO; |
|---|---|
| 回答者:k_o_r_o_c_h_a_n | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 07/11/08 02:05 |
|
| |
| この回答へのお礼 | 詳しい回答ありがとうございます。 解決しました。 |