重要なお知らせ

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

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

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件)

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
    • good
    • 0

サブクエリつかえばよいのでは?



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が正規化されておらず、エラーにはならないですが微妙です。
    • good
    • 0

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

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