ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

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
この回答へのお礼詳しい回答ありがとうございます。
解決しました。