重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Aテーブル
日付 番号 品名 個数 単価 合計
10/1 1 aa 4 10 40
10/1 2 bb 3 8 24
10/1 2 cc 6 10 60
10/2 1 dd 5 8 40

Bテーブル
日付 番号
10/1 1
10/1 2

結果
AテーブルとBテーブルを比較して、
結果、Aテーブルに、以下のテーブルを作りたいです。

Aテーブル
日付 番号 個数 合計
10/1 1 9 80
10/1 2 9 84

のように、AテーブルとBテーブルの日付と番号と合計でsumをして、Groupして、追加及び更新をしたいんですが、inner JOIN では、出来ませんでした。

わかりづらいと思いますが申し訳ありませんが、
サンプルをつけて頂けませんか?

宜しくお願い致します。

質問者からの補足コメント

  • 結果の個数は、消し忘れました。

    申し訳ありません。

      補足日時:2016/12/22 19:15
  • AテーブルとBテーブルの日付と番号が同じデータで、合計を加算したいです。

    宜しくお願い致します。

      補足日時:2016/12/23 14:48

A 回答 (3件)

AテーブルとBテーブルを比較してAテーブルに作るのではなくて他の


テーブルに作るのでは駄目でしょうか。

単に結果を表示するのであれば下記となりますが。
SELECT A.日付, A.番号, Sum(A.個数) AS 個数の合計, Sum(A.合計) AS 合計の合計
FROM A INNER JOIN B ON (A.番号 = B.番号) AND (A.日付 = B.日付)
GROUP BY A.日付, A.番号;
    • good
    • 0

> AテーブルとBテーブルの日付と番号が同じデータで、合計を加算したいです。



そうすると
日付 番号 合計
10/1 1 80
とはなりませんが。
「日付と番号が同じデータ」が正しくて、「合計80」が間違いなのですか?
「日付と番号が同じデータ」が間違いで、「合計80」が正しいのですか?
「両方正しい」は有り得ません。



「日付と番号が同じデータ」なら「Aテーブル.日付がBテーブル.日付から求めた範囲内」は悩むこと無いはずです
    • good
    • 0

・AテーブルとBテーブルから、どんな計算方法で「結果のAテーブル」ができるのか、説明してもらえませんか?


日本語でお願いします。

10/1, 2 , 84

10/1 2 bb 3 8 24
10/1 2 cc 6 10 60

日付10/1,番号2,合計 60+24
なのは、なんとなく予想が付きます。

ですが
10/1, 1 ,80

10/1 1 aa 4 10 40
10/2 1 dd 5 8 40
からどうやって導かれるのか?
日付10/1,番号1,合計 40+40
だとして、 「10/2 1 dd 5 8 40」が合計の対象となる根拠は何なのでしょうか?
「10/30 1 ee 6 8 48」「11/1 1 ee 6 8 48」「9/30 1 ee 6 8 48」
これらは集計対象になるんでしょうか?

Bテーブルの日付10/1 で 「10/2 1 dd 5 8 40」が対象になる、とするなら、Bテーブルの日付は「集計範囲を表わす」ことになります。
そうすると、10/1 が何を意味するかが不明です。
日を無視した「10月」なのか、「10/1開始」で1ヶ月なのか四半期なのか年なのか。



・「Aテーブルに、以下のテーブルを作りたいです。」の意図がわかりません。
Aテーブルは「日付 番号 品名 個数 単価 合計」を列に持つテーブルです。
作りたいという「Aテーブル」は「日付 番号 合計」で、上記のAテーブルとは違います。
『Aテーブルに、以下のテーブルを作る』を文字通りに解釈すれば、

(集計結果を一次テーブル等に保存);
DROP TABLE Aテーブル; -- 古いAテーブルは消す
CREATE TABLE Aテーブル (日付 ,番号 ,合計);-- 新しいAテーブルを作る
INSERT INTO Aテーブル FROM 集計結果 -- 保存した結果を戻す

という流れになるかと思いますが、おそらく、あなたが求めているものでは無いと思います。
※ もし、本気で、Aテーブルを書き換えてしまおうとしているなら、その考え自体を改めた方がよいです。

単にデータを取り出すだけなら、SELECT です。
INSERT や UPDATEが必要なのは、結果をテーブルに書き出すときです。
このときは Aテーブルではなく、 A集計テーブル のような別のテーブルにするのが普通です。


・使用しているDBシステムとそのバージョン、各テーブルの定義を明記してください。
例えば。
「日付」列が日付型の場合、用意されている日付操作用関数を使って、簡単に「次の月」とかを計算できます。
「日付」列が文字列の場合、用意されている文字列操作用関数を使って、必要な部分を取り出して加工する、といったことが必要になります。
 あるいは、文字列型から日付型に変換して、日付操作用関数を使う、といった方法を取ります。
どんな関数が使えるかは、システムによります。

例えば。
A集計テーブルに保存する場合、既存の行はUPDATE、新規行はINSERTすることとします。
これが1文でINSERTとUPDATEを行えるシステムと、別々に判定する必要のあるものとがあります。
1文でできるものでも、システムによって構文が違います。



以上のようなことが揃って、ようやくSQLにできます。


SELECTはこんな感じでしょう。情報が無いので、これ以上は書けません。

SELECT
 Bテーブル.日付,
 Bテーブル.番号,
 SUM(Aテーブル.合計) as 合計
FROM Aテーブル
INNER JOIN Bテーブル
 ON 「Aテーブル.日付がBテーブル.日付から求めた範囲内」
  AND Aテーブル.番号=Bテーブル.番号
GROUP BY Bテーブル.日付,Bテーブル.番号
    • good
    • 0

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

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

今、見られている記事はコレ!