解決済

clip!clip!
Ads By Google

SQLでの副問い合わせ(サブクエリ)について教えて下さい。自分の出したい結果が思うように得られず悩んでおります。



結果を得たものをCSVに落としたいわけですが”見え方”ヴィジュアル面に問題があります。
欲しい結果をそれぞれSQLにしますと

≪受注表テーブルから≫
SELECT 担当, 顧客コード FROM 受注表 WHERE 担当 = '田中' AND 商品コード = 'A1' AND 顧客コード = '003' ;
SELECT 担当, 顧客コード FROM 受注表 WHERE 担当 = '田中' AND 商品コード = 'A1' AND 顧客コード = '020' ;

≪入荷表テーブルから≫
SELECT 担当, 入荷日 FROM 入荷表 WHERE 担当 = '田中' AND 入荷コード = 'X013' AND 入荷日 = '20080701' ;
SELECT 担当, 入荷日 FROM 入荷表 WHERE 担当 = '田中' AND 入荷コード = 'X123' AND 入荷日 = '20080630' ;

≪欲しい結果の見え方≫

担当 顧客コード 担当 顧客コード 担当 入荷日 担当 入荷日
── ───── ── ───── ── ─── ── ─────
田中 003 田中 020 田中 20080701 田中 20080630
田中 003 田中 020 田中 20080701 田中 20080630

このように関係のないレコードを横並びにするにはどうしたらよいでしょうか?
使っているDBはOracle10、SQL server、MySQL、HiRDBそれぞれで実行したいのですが・・・
どなたかご教示ください。

2008-07-13 01:43の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。

回答(1)

1.

2008-07-14 00:13:17ベスト
単純に副問い合わせを使って、データを横に並べたいのであれば、以下のようなSQLでできると思います。
※SQLを実行して試したわけではありません。
 動く保証はしませんのでご注意を…

SELECT
受注1.担当,
受注1.顧客コード
FROM (
SELECT
 担当,
 顧客コード
FROM 受注表
WHERE 担当 = '田中'
  AND 商品コード = 'A1'
  AND 顧客コード = '003') 受注1
INNER JOIN (
 SELECT
  担当,
  顧客コード
 FROM 受注表
 WHERE 担当 = '田中'
   AND 商品コード = 'A1'
   AND 顧客コード = '020') 受注2
 ON 受注1.担当 = 受注2.担当
INNER JOIN (
 SELECT
  担当,
  入荷日
 FROM 入荷表
 WHERE 担当 = '田中'
   AND 入荷コード = 'X013'
   AND 入荷日 = '20080701') 入荷1
 ON 受注1.担当 = 入荷1.担当
INNER JOIN (
 SELECT
  担当,
  入荷日
 FROM 入荷表
 WHERE 担当 = '田中'
   AND 入荷コード = 'X123'
   AND 入荷日 = '20080630') 入荷2
 ON 受注1.担当 = 入荷2.担当

但し、上記のSQLでは、受注1,受注2,入荷1,入荷2のデータが全て存在する場合のみしかデータが出力されません。
受注1が存在すれさえすれば、他のデータがなくても出力したいのであれば、INNER JOINをLEFT OUTER JOINに変えて下さい。
回答レベル : アドバイス
Ads By Google

コメント

まだコメントがありません

トラックバック(2)

トラックバックURL: