許せない心理テスト

SQl勉強中の初心者です
結合したテーブルのSUMの値が思うように集計できません。
以下のような2つのテーブルがあったとします。

テーブルA
Date,ConNo
2016-05-15,test001
2016-05-15,test001
2016-05-25,test002
2016-05-25,test002
2016-05-25,test002

テーブルB
ConNo,line,Amt
test002,1,1500
test002,2,1500
test002,3,1500

select A.Date,A.ConNo,Sum(B.RAmt) as B_sum
from テーブルA A left outer join テーブルB B on A.ConNo= B.ConNo
group by A.Date,A.ConNo
into :arDate,:arConNo,:arAmt;

テーブルAを主として、group byしたときに、対応するテーブルBをSUMしたいのですが、
SUMした値が以下のようにデータ数分倍になってしまいます。
2016-05-15,test001,0
2016-05-25,test002,13500

以下のような結果にする場合は、どう書けばいいのでしょうか?
2016-05-15,test001,0
2016-05-25,test002,4500


宜しくお願いします

A 回答 (2件)

なんかテーブルAのデータの持ち方がSQLらしくない


2016-05-15,test001が2つあって
2016-05-25,test002が3つある必要があるのでしょうか?
それぞれのデータの相関関係はあるのでしょうか?
テーブルの設計についてすこし知識を深めたほうが良いと思います

今のものを使う前提であれば一度テーブルAをユニークなデータに
つぶしてから、結合するのが妥当ですが

SELECT A.Date,A.ConNo,Sum(B.Amt) as B_sum
FROM (select DISTINCT Date,ConNo
from tableA ) AS A
left join tableB as B on A.ConNo= B.ConNo
group by A.Date,A.ConNo

ただしこの場合、2016-05-15のSUMは0ではなくNULLです
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

おっしゃる様にデータだけ見ると意味ある構造なの?
ってなりますよね。
今回の質問では必要項目しか載せていないので、余計にそう思われたのかもしれません。
ただ、テーブル設計についても知識は深めていければと思っています。

今日は外出なので、後日試してみます。

お礼日時:2016/06/02 12:59

たぶん



テーブルA
Date,ConNo,line

にして

select A.Date, A.ConNo, sum(B.Amt)
from A
left join B on A.ConNo = B.ConNo and A.line = B.line
group by A.Date, A.ConNo

とすれば解決
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

今日は外出なので、後日試してみます。

お礼日時:2016/06/02 13:00

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A