みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL Server複数テーブルの連結

在庫管理を行う上で、3つのテーブルを結合したいと考えておりますが、うまく結合できません。

【テーブル抜粋】
・販売
 販売日
 部門CD
 店舗CD
 商品CD
 販売数
・仕入
 仕入日
 部門CD
 店舗CD
 商品CD
 仕入数
・棚卸
 棚卸日
 部門CD
 店舗CD
 商品CD
 実在庫

各テーブルから、日付で絞りこんで抽出は出来ていますが、上記を結合させる方法がわかりません。
※各テーブルの商品数がバラバラです。
例えば、棚卸にはあるが、仕入も販売もない商品。
販売にはあるが、在庫も仕入もない商品N。

試した方法、在庫を基本に販売をLEFT OUTER JOINで結合し、仕入をLEFT OUTER JOINで結合しGROUP BYで集計

SELECT
部門CD,店舗CD,商品CD,ISNULL(実在庫,0) AS Z,ISNULL(販売数,0) AS B,ISNULL(仕入数,0) AS S
FROM(
SELECT 部門CD,店舗CD,商品CD,SUM(実在庫) FROM 棚卸
WHERE 棚卸日 BETWEEN (開始日) AND (終了日)
ORDER BY 部門CD,店舗CD,商品CD
)AS ZAI
LEFT OUTER JOIN(
SELECT 部門CD,店舗CD,商品CD,SUM(販売数) FROM 販売
WHERE 販売日 BETWEEN (開始日) AND (終了日)
ORDER BY 部門CD,店舗CD,商品CD
) AS BAI
ON ZAI.商品CD=BAI.商品CD
LEFT OUTER JOIN(
SELECT 部門CD,店舗CD,商品CD,SUM(仕入) FROM 仕入
WHERE 仕入日 BETWEEN (開始日) AND (終了日)
ORDER BY 部門CD,店舗CD,商品CD
) AS SII
ON ZAI.商品CD=SII.商品CD

上記の結果、結合はしたのですが、店舗間の商品数がバラバラとなりました。
例えば、aという店舗の販売数に、b販売数がはいっていたらり?
※結合する前の、クエリは正常に抽出しておりますので、結合方法が悪いと考えております。

もしかすると、テーブルの項目をそろえて、UNION ALLでつなげばと思ったのですが、コーディング方法がわからす・・・

結合方法をアドバイス頂けたら幸いです。

投稿日時 - 2015-01-27 10:02:43

QNo.8905488

すぐに回答ほしいです

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

あと、
結合キーは商品CDだけでいいんですか?
部門CD,店舗CD,商品CDの3つセットじゃないんですか?

投稿日時 - 2015-01-27 23:47:07

お礼

ngwave様
アドバイスありがとうございます。

おっしゃる通り、3つセットですが、1対多のリレーションしか組んだことがないため、やり方がわかりません。

厚かましいお願いですが、書き方をアドバイス頂ければ幸いです。

投稿日時 - 2015-01-29 11:04:59

ANo.2

このQ&Aは役に立ちましたか?

14人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

No1とNo2の方の回答に補足して

結合する前のそれぞれのクエリにある SUM(実在庫)等に AS ○○○ を付与しないと
ISNULL(実在庫,0) の判定がされないように見えます

SELECT 部門CD,店舗CD,商品CD,SUM(実在庫) FROM 棚卸

SELECT 部門CD,店舗CD,商品CD,SUM(実在庫) AS 実在庫 FROM 棚卸


以上、参考になれば幸いです

投稿日時 - 2015-01-28 09:30:21

お礼

s-eiji様
アドバイスありがとうございます。
試してみます。

投稿日時 - 2015-01-29 11:10:17

ANo.1

order by と group by を間違えていませんか?

投稿日時 - 2015-01-27 23:43:53

お礼

ngwave様
打ち間違いです。
ご指摘ありがとうございました。

投稿日時 - 2015-01-29 11:05:41

あなたにオススメの質問