解決済み

SQLで違うテーブルの結果を組み合わせたい

  • すぐに回答を!
  • 質問No.4174831
  • 閲覧数1159
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 10% (18/167)

SQLでどう結果を返したらいいのかわからないので力を貸してください。
下記の受注表と入荷表があります。

受注表

担当 商品コード 顧客コード
── ──── ─────
田中 A1 001
田中 A1 002
田中 A1 003
山田 A2 020
山田 A1 003
田中 A1 020


入荷表

担当 入荷コード 入荷日
── ───── ─────
山田 X013 20080701
山田 X013 20080701
田中 X013 20080701
山田 X013 20080630
山田 X013 20080630
田中 X123 20080630

自分の欲しい結果を出すための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

質問者が選んだベストアンサー

  • 回答No.3

ベストアンサー率 88% (591/669)

原則論でいえば、SQLはデータを抽出、集計するものであって、データのレイアウトをするためのものではないです。しかし、私もそういうリクエストは受けたことがありますよ。
(項目自体は関係なくても「並べて見たい」というユーザはいますね)
SQLではできないと思われるのも何なので、SQL Server 2005の例を挙げます。それぞれのクエリの○行目がそろえばいいわけです。
SELECT
a.担当, a.顧客コード,
b.担当, b.顧客コード,
c.担当, c.入荷日,
d.担当, d.入荷日
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY 担当) SEQ,
担当, 顧客コード FROM 受注表
WHERE 担当 = '田中' AND 商品コード = 'A1' AND 顧客コード = '003') a
FULL OUTER JOIN
(SELECT ROW_NUMBER() OVER (ORDER BY 担当) SEQ,
担当, 顧客コード FROM 受注表
WHERE 担当 = '田中' AND 商品コード = 'A1' AND 顧客コード = '020' ) b
ON b.SEQ=a.SEQ
FULL OUTER JOIN
(SELECT ROW_NUMBER() OVER (ORDER BY 担当) SEQ,
担当, 入荷日 FROM 入荷表
WHERE 担当 = '田中' AND 入荷コード = 'X013' AND 入荷日 = '20080701') c
ON c.SEQ=COALESCE(a.SEQ,b.SEQ)
FULL OUTER JOIN
(SELECT ROW_NUMBER() OVER (ORDER BY 担当) SEQ,
担当, 入荷日 FROM 入荷表
WHERE 担当 = '田中' AND 入荷コード = 'X123' AND 入荷日 = '20080630' ) d
ON d.SEQ=COALESCE(a.SEQ,b.SEQ,c.SEQ)
ORDER BY COALESCE(a.SEQ,b.SEQ,c.SEQ,d.SEQ)
Be MORE 7・12 OK-チップでイイコトはじまる

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 55% (526/942)

select *
from
(
SELECT 担当, 顧客コード FROM 受注表
WHERE
担当 = '田中' AND 商品コード = 'A1' AND 顧客コード = '003'
) as a,
(
SELECT 担当, 顧客コード FROM 受注表
WHERE
担当 = '田中' AND 商品コード = 'A1' AND 顧客コード = '020' ;
) as b,
(
SELECT 担当, 入荷日 FROM 入荷表
WHERE
担当 = '田中' AND 入荷コード = 'X013' AND 入荷日 = '20080701' ;
) as c,
(
SELECT 担当, 入荷日 FROM 入荷表
WHERE
担当 = '田中' AND 入荷コード = 'X123' AND 入荷日 = '20080630' ;
) as d
;
で、4つの問い合わせ結果の総当たりの結果が得られます。
各SQLが1件ずつしか返さないのであれば、お望みの結果になります。

>ただ全く関係のないテーブル同士の結果を「横並び」表示にしたいだけです
無条件に結合するなら、条件を書かなければ良いだけです。
  • 回答No.1

ベストアンサー率 43% (833/1926)

>ただ全く関係のないテーブル同士の結果を「横並び」表示にしたいだけです

ルールが明確でないから、他人からアドバイスできないし、SQLも提示できないのです。
データは今回示されたもの以外、一切、存在しないのですか?それならば、強引にSQLを記述することも可能です。
そもそも、今回の得たい結果というのは、すべて条件式で指定している訳で、SQLでは存在の有無だけ分かればいいのでしょうか?
RDBMSを使う意味、SQLを使う意味が、まったくないと思いますが?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ