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

締切り済みの質問

【SQL】group byについて

SELECT

A.商品名
B.商品名

FORM A,B

WHERE

((A.店コード IN (引数.店コード)) and (A.商品コード IN(引数.商品コード))
AND (A.店コード = C.店コード)
AND ((A.商品コード = D.商品コード) AND (A.店コード = D.店コード))

というSQLに下記条件を追加したいのですが、集計関数の使用方法がわかりません。

SELECT Sum(金額)
FROM Q
WHERE Q.店コード = A.店コード AND Q.商品コード = A.商品コード
GROUP BY Q.店コード, Q.商品コード

Qテーブルは 店コード、商品コード、メニューコード がKEYなのですが、
店コードと商品コードだけで集計した値をSELECTしたいのです。

恐れ入りますが、ご教授頂けますよう宜しくお願いします。

投稿日時 - 2007-02-27 16:30:26

QNo.2788549

すぐに回答ほしいです

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

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

回答(4)

ANo.4

つまり、仕様的には
1.AテーブルとマスタのCテーブルを結合した店コードを取得する。
2.取得した店コードでDテーブルの商品コードを取得する。
3.1で取得した店コードと2で取得した商品コードでQテーブルより金額を取得したい。
  その際、店コードと商品コードが同じものがあれば合計金額で取得したい。
と言うことでよろしいでしょうか?

select Q.店コード,Q.商品コード,sum(Q.金額) as 金額
from (select A.店コード,D.商品コード from A,C,D
     where A.店コード=C.店コード and A.店コード=D.店コード
     group by A.店コード,D.商品コード) E
, Q
where E.店コード=Q.店コード and E.商品コード=Q.商品コード
group by Q.店コード,Q.商品コード
でいいと思います。

問題はA,B,Cの結合ときに複数の商品コードが取得されるので、ここで同じ商品コードは1つしか取得するようにしなければなりません。そうでなければ同じ商品コード複数取得されることになり後の勝利が上手く行きません。
取得した店コードと商品コードでQテーブルより金額を取得し集計を行います。ここでも複数の商品コードが発生することになりますのでgroup byが必要でしょう。動作確認はしておりませんので、悪しからず。

投稿日時 - 2007-03-02 11:17:11

お礼

ありがとうございます。

上記内容で動作しました。
ご丁寧にありがとうございました。

投稿日時 - 2007-03-02 12:51:04

ANo.3

#1さんと同じ感想を持ったものですが、それではあんまりなのでw

・最初のselect文に登場するC,Dのテーブルは何ですか?
・A,B,C,D,Qのテーブルのカラムを抜粋でいいので教えて下さい。
・集計するのはどのテーブルに属する金額なのでしょうか?
・店コード、商品コードは全てのテーブルが持っていてKeyになっているのでしょうか?

以上です。

投稿日時 - 2007-02-27 17:02:39

ANo.2

(1)Qテーブルから金額合計、A,B テーブルから商品名を取得する
(2)Q,A,B は 店コード、商品コード で結合
(3)取得するのは 引数の店コード、商品コードのみ
というのであれば、

SELECT
W.店コード
,W.商品コード
,X.商品名
,W.金額
FROM (
    SELECT
     店コード
    ,商品コード
    ,Sum(金額) AS 金額
    FROM Q
    WHERE 店コード = 引数 AND 商品コード = 引数
    GROUP BY 店コード, 商品コード
) W
    LEFT JOIN (
        SELECT 店コード, 商品コード, 商品名
        FROM A
        WHERE 店コード = 引数 AND 商品コード = 引数

        UNION ALL
        SELECT 店コード, 商品コード, 商品名
        FROM B
        WHERE 店コード = 引数 AND 商品コード = 引数
        ) X ON ( W.店コード = X.店コード
           AND W.商品コード = X.商品コード )

投稿日時 - 2007-02-27 17:01:22

お礼

ありがとうございます。
大変参考になりました。
今回はunionが使えないのですが、
じっくり読みこみました。
ありがとうございます。
今後に役立てようと思います。

投稿日時 - 2007-03-10 22:46:22

ANo.1

仕様を日本語で書いてもらえませんか

投稿日時 - 2007-02-27 16:42:41

補足

恐れ入ります。日本語にて表現しています。

---各テーブルkey
・Aテーブル(データ)
 店コード
・Cテーブル(マスタ)
 店コード
・Dテーブル(マスタ)
 店コード
 商品コード
・Qテーブル(データ)
 店コード
 商品コード
 メニューコード
--- 
(処理内容)店コードと商品コードを引数にデータを取得する。
(1)⇒Aデータの情報(棚卸数)と、Aの店コードと紐づいたCの店名
  Aの店コードと、商品コードと紐づいたDの商品名を取得。
(2)(ここから追加処理)(1)および、
 ⇒Qの店コードとAの店コードが同じ、
  Qの商品コードとA商品コードが同じであることを条件に集計し
  Qテーブルにある金額をサマリしたい。
  
---Qテーブルの内容
店コード:商品コード:メニューコード:金額
123  :456    :01      :100
123  :456    :02      :200
---
結果、金額に関しては、
引数.店コード:123、引数.商品コード:456の場合、「300」の出力を行いたい。

◇当初の質問より訂正した個所

SELECT

A.棚卸数
C.店名
D.商品名

FORM A,C,D

以上となります。
宜しくお願いします。

投稿日時 - 2007-02-27 18:15:09

あなたにオススメの質問