
MySQLでSQLを書いている初心者です。
ある会社には卸売部門と小売部門があり、同一の商品を扱っています。
それぞれの売上明細は tbl_sales と tbl_retailsales で別になっています。
商品別の2つの部門の売上数量を1行で表現したいと考えています。
下のような感じです。
商品ID 商品名 卸売 小売
=========================
00001 aaaa 100 10
00002 bbbb 200 13
00003 cccc 300 15
2つのSQLをUNIONでつなげてみましたが同一行に「卸売」「小売」が並んでくれません。
SELECT goodsId, goodsName, sum(quantity)
FROM tbl_sales
WHERE salesDate BETWEEN '2014-06-01' AND '2014-06-30'
GROUP BY goodsId
UNION
SELECT goodsId, goodsName, sum(quantity)
FROM tbl_retailsales
WHERE retailSalesDate BETWEEN '2014-06-01' AND '2014-06-30'
GROUP BY goodsId
どのようにSQLを組み立てたらいいでしょうか。
教えて下さい。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
JOIN構文はご存知ですか?
「同一の商品」ということなので、それぞれのテーブルのgoodsIdが指し示すものが同じものだと思うので以下のクエリではいかがでしょうか?
SELECT sales.goodsId, sales.goodsName, salesSum, retailsalesSum
FROM (
SELECT goodsId, goodsName, SUM( quantity ) AS salesSum
FROM tbl_sales
WHERE salesDate BETWEEN '2014-06-01' AND '2014-06-30'
GROUP BY goodsId
) AS sales
JOIN (
SELECT goodsId, goodsName, SUM( quantity ) AS retailsalesSum
FROM tbl_retailsales
WHERE salesDate BETWEEN '2014-06-01' AND '2014-06-30'
GROUP BY goodsId
) AS retailsales
ON sales.goodsId = retailsales.goodsId
No.1
- 回答日時:
サブクエリつかえばよいのでは?
SELECT goodsId, goodsName,sum(sum1) as sum1,sum(sum1) as sum2 FROM
(
SELECT goodsId, goodsName, sum(quantity) as sum1,0 as sum2 FROM tbl_sales
WHERE salesDate BETWEEN '2014-06-01' AND '2014-06-30'
GROUP BY goodsId
UNION
SELECT goodsId, goodsName, 0,sum(quantity) FROM tbl_retailsales
WHERE retailSalesDate BETWEEN '2014-06-01' AND '2014-06-30'
GROUP BY goodsId
) as sub
GROUP BY goodsId
ただし、goodsNameが正規化されておらず、エラーにはならないですが微妙です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
int(11)の(11)とは何を意味して...
-
IDの採番について
-
重複していないレコードの抽出...
-
Outlook 送受信エラー
-
SQLで特定の項目の重複のみを排...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
INSERT文でフィールドの1つだ...
-
SQLで列名を変数にできないでし...
-
外部参照してるキーを主キーに...
-
Excel再起動でアドインのタブが...
-
EXISTSを使ったDELETE文
-
1、Rstudioで回帰直線を求める...
-
英語ができる方、問題をお願い...
-
SQLServerで文字列の末尾からあ...
-
商品番号を入力すると、商品名...
-
1日に1人がこなせるプログラム...
-
UPDATE文のWHERE条件に他のテー...
-
select文のwhere句に配列を入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複していないレコードの抽出...
-
IDの採番について
-
mysqlで連結先のテーブルをカウ...
-
合計点順にソートかつ同一人の...
-
int(11)の(11)とは何を意味して...
-
mysqlのsql文について質問です
-
チェックボックスからの受け渡...
-
MySQL 文字列の部分一致の書き方
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
SQLで特定の項目の重複のみを排...
-
SELECT 文 GROUP での1件目を...
-
Outlook 送受信エラー
-
エクセルの関数について教えて...
-
for whichの使い方
-
EXISTSを使ったDELETE文
-
INSERT文でフィールドの1つだ...
-
access2021 VBA メソッドまたは...
おすすめ情報