dポイントプレゼントキャンペーン実施中!

3テーブルよりを以下の条件で1つのSELECT文で集計したいのですが可能でしょうか?
 ・A_TBLのA単位でB_TBLのNYUKAとC_TBLのSYUKAを集計
<<A_TBL>>   <<B_TBL>>     <<C_TBL>>
A  STOCK   B  A NYUKA   C  A SYUKA
a01  100    b01 a02 10   c01 a03 10
a02  200    b02 a01 20   c02 a01 20
a03  300    b03 a01 10   c03 a05 10
a04  400    b04 a03 30   c04 a01 30
a05  500    b05 a05 30   c05 a03 20
           b06 a02 20   c06 a01 10
           b07 a01 10   c07 a03 50

外部結合
SELECT a.A,a.STOCK,SUM(b.NYUKA) AS SUM_NYUKA,SUM(c.SYUKA) AS SUM_SYUKA
FROM A_TBL AS a".
LEFT OUTER JOIN B_TBL AS b ON a.A=b.A
LEFT OUTER JOIN C_TBL AS c ON a.A=c.A".
GROUP BY a.A
でうまくいきません。3つ以上のテーブルの外部結合の記述が間違っているのはわかるのですが、
どのように記述すればよいか、ネットで検索してもわかりませんでした。
宜しくお願い致します。

A 回答 (4件)

>3テーブルにすると、交差結合に近い結果になってしまいます。



当然ですが、aとbの結合結果に、cを外部結合するのだから、そうなりますよね。
aに対して、b,cが一対になるように事前集約して、外部結合すれば良いでしょう。

select a.A,a.STOK,x.SUM_NYUKA,y.SUM_SYUKA
from A_TBL as a
left join (select A,sum(NYUKA) as SUM_NYUKA from B_TBL group by A) as x on (a.A=x.A)
left join (select A,sum(SYUKA) as SUM_SYUKA from C_TBL group by A) as y on (a.A=y.A)
order by a.A
    • good
    • 0

っていうか単純に集計してから合わせればよいでしょう。



CREATE TEMPORARY TABLE TEMP_B
SELECT A,SUM(NYUKA) AS SUM_NYUKA
FROM B_TBL
GROUP BY A;
CREATE TEMPORARY TABLE TEMP_C
SELECT A,SUM(SYUKA) AS SUM_SYUKA
FROM C_TBL
GROUP BY A;
SELECT a.A
,STOCK
,SUM_NYUKA
,SUM_SYUKA
FROM A_TBL AS a
LEFT JOIN TEMP_B on a.A=TEMP_B.A
LEFT JOIN TEMP_C on a.A=TEMP_C.A
    • good
    • 0

SELECT


ab.A
,ab.STOCK
,ab.SUM_NYUKA
,ac.SUM_SYUKA
FROM
(
SELECT
a.A
,a.STOCK
,SUM(b.NYUKA) AS SUM_NYUKA
FROM
A_TBL AS a
LEFT OUTER JOIN B_TBL AS b
ON a.A=b.A
GROUPBY
a.A
,a.STOCK
)abINNERJOIN
(
SELECT
a.A
,a.STOCK
,SUM(c.SYUKA) AS SUM_SYUKA
FROM
A_TBL AS a
LEFT OUTER JOIN C_TBL AS c
ON a.A=c.A
GROUPBY
a.A
,a.STOCK
)ac
ONab.A=ac.A
ANDab.STOCK=ac.STOCK
GROUPBY
ab.A
,ab.STOCK
--------------------------
こんなのどうですかね?実行してないので、構文ミスがあるかもなので、ご了承ください。
    • good
    • 0

ぱっとみ、


>GROUP BY a.A
に、「a.STOCK」を追加してやればいけそうな気がしますが。

この回答への補足

早速のご回答有難う御座います。
GROUP BY a.A,a.STOCKでは結果は同じでした。

ちなみに、
SELECT a.A,a.STOCK,SUM(b.NYUKA) AS SUM_NYUKA
FROM A_TBL AS a".
LEFT OUTER JOIN B_TBL AS b ON a.A=b.A
GROUP BY a.A
と2テーブルの外部結合だとうまくいきますが、
3テーブルにすると、交差結合に近い結果になってしまいます。

補足日時:2007/12/17 13:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!