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

解決済みの質問

複数のテーブルを外部結合する

複数のテーブルを外部結合してSUMをとってきたいとき、SQLServerではどのような結合にすればよいのでしょう。
一対一の関係なら「LEFT JOIN」を使って「FROM テーブルA LEFT JOIN テーブルB ON テーブルA.フィールド = テーブルB.フィールド」ができますが、一対複数の関係で書き方がよくわからず、かなり困っています。

例)
ユーザーマスター
・ユーザーID
・ユーザー氏名

○月売上テーブル←○には1~12が入る
・ユーザーID
・売上金額

欲しいデータは
・ユーザーID
・ユーザー氏名
・SUM(1月売上テーブル.売上金額) 1月
・SUM(2月売上テーブル.売上金額) 2月
・SUM(3月売上テーブル.売上金額) 3月
以降、12月まで続く

ORACLEだと↓のやり方で、
・ユーザーマスターはすべて
・各月の売上テーブルはユーザーID毎に集計(外部結合)
を出力してくれるのですが…。

SELECT u.ユーザーID,u.ユーザー氏名,
SUM(m1.売上金額),SUM(m2.売上金額),SUM(m3.売上金額),,,
FROM ユーザーマスター u,
1月売上テーブル m1,
2月売上テーブル m2,
3月売上テーブル m3,,,
WHERE u.ユーザーID=m1.ユーザーID(+)
AND u.ユーザーID=m2.ユーザーID(+)
AND u.ユーザーID=m3.ユーザーID(+),,,
GROUP BY u.ユーザーID,u.ユーザー氏名
ORDER BY u.ユーザーID,u.ユーザー氏名

投稿日時 - 2005-09-29 07:06:50

QNo.1680321

すぐに回答ほしいです

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

普通の外部結合でしたら、LEFT JOIN を使用した以下のようなSQLで抽出できませんか?

SELECT u.ユーザーID,u.ユーザー氏名,
SUM(m1.売上金額),SUM(m2.売上金額),SUM(m3.売上金額),,,
FROM ユーザーマスター u
  LEFT JOIN 1月売上テーブル m1 ON u.ユーザーID=m1.ユーザーID
  LEFT JOIN 2月売上テーブル m2 ON u.ユーザーID=m2.ユーザーID
  LEFT JOIN 3月売上テーブル m3 ON u.ユーザーID=m3.ユーザーID
    :
GROUP BY u.ユーザーID,u.ユーザー氏名
ORDER BY u.ユーザーID,u.ユーザー氏名


※一対一の関係の場合は本来はLEFT JOINではなく、INNNER JOINが正しいかと思うのですが。

投稿日時 - 2005-09-29 09:02:40

お礼

回答ありがとうございます。このやり方で実現できました。
ちなみに、テーブルAとテーブルBは内部結合、テーブルAとテーブルa1,a2およびテーブルBとテーブルb1,b2は外部結合(質問と同じ)という場合、
FROM
テーブルA a JOIN テーブルB b ON a.ID=b.ID --1
a LEFT JOIN テーブルa1 a1 ON a.ID=a1.ID --2
   LEFT JOIN テーブルa2 a2 ON a.ID=a2.ID --3
b LEFT JOIN テーブルb1 b1 ON b.ID=b1.ID --4
   LEFT JOIN テーブルb2 b2 ON b.ID=b2.ID --5
と並べて書いてもいいでしょうか?
それとも1と2,3と4の間にANDか何かいりますか?

投稿日時 - 2005-10-01 06:52:50

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

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

-広告-
-広告-

回答(2)

ANo.2

これでいけるでしょう。

SELECT u.ユーザーID,u.ユーザー氏名,
m1.売上,m2.売上,・・・
from ユーザーマスター u
left join (select ユーザーID,sum(売上金額) as 金額
  from 1月売上テーブル group by ユーザーID) m1 on u.ユーザーID=m1.ユーザーID
・・・

投稿日時 - 2005-09-30 13:11:02

お礼

回答ありとうございます。サブクエリーを使うやり方も今度試してみます。

投稿日時 - 2005-10-01 06:52:58

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-