MYSQLに以下のようなデータが入っていて表一覧のようにするには

SELECT CACE GROOPBYでやるにはどうしたらいいでしょうか?

自分で考えたのは

SELECT
date,SUM(kosu),kanribangou
FROM
HassouKanriTB
GROUP BY
(CASE WHEN date = 6 THEN SUM(kosu),syouhinmei ELSE 0 END)


ですがうまくいきませんでした。

MYSQLの中身

+-------------+-------------------------------------+
| 日付 | 商品名 | 個数
+-------------+-------------------------------------+
2011/08/01| aaa | 30 |
2011/08/22 aaa | 30 |
2011/09/01| aaa | 30 |
2011/10/05| aaa | 30 |
2011/08/01| bbb | 30|
2011/08/15| bbb | 30|
2011/09/01| bbb | 30|
2011/10/01| bbb | 30|
2011/010/01| ccc| 30|
2011/08/03| ccc| 30|
2011/09/01| ccc| 30|

表一覧
+-------------+-------------------------------------+
| 商品名 | 8月 | 9月 | 10月…
+-------------+-------------------------------------+
| aaa | 60, 30,30|
| bbb | 60,30,30|
| ccc | 30,30,30|

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/08/08 18:50:28
  • 終了:2011/08/10 02:32:01

ベストアンサー

id:lunlumo No.2

lunlumo回答回数107ベストアンサー獲得回数142011/08/10 02:18:47

case+group byでやるならこんな感じでしょうか。

select
  shouhinmei,
  sum(
    case
      when date between '2011-08-01' and '2011-08-31' then kosu
      else 0
    end
  ) as august,
  sum(
    case
      when date between '2011-09-01' and '2011-09-30' then kosu
      else 0
    end
  ) as september,
  sum(
    case
      when date between '2011-10-01' and '2011-10-31' then kosu
      else 0
    end
  ) as october
from 
  HassouKanriTB
group by
  shouhinmei;

その他の回答(1件)

id:nmori No.1

morinatsu回答回数72ベストアンサー獲得回数82011/08/08 21:57:51

標準SQLの範囲でお望みの結果を得ようとするとこうなります。

 

年月などの対応がハードコードという点でお望みのレベルには達していないと思います。

単一のSQLでサッパリきれいに書ける構文があればぜひ自分も知りたいです。

 

SELECT kanribangou, sum(8月), sum(9月), sum(10月)
  FROM (SELECT kanribangou, kosu as 8月, 0 as 9月, 0 as 10月
          FROM HassouKanriTB
         WHERE date like '2011/08%'
         UNION ALL
        SELECT kanribangou, 0 as 8月, kosu as 9月, 0 as 10月
          FROM HassouKanriTB
         WHERE date like '2011/09%'
         UNION ALL
        SELECT kanribangou, 0 as 8月, 0 as 9月, kosu as 10月
          FROM HassouKanriTB
         WHERE date like '2011/10%')
 GROUP BY kanribangou;
 
結果(kanribangou,sum(8月),sum(9月),sum(10月)の順)
aaa	60	30	30
bbb	60	30	30
ccc	30	30	30
id:lunlumo No.2

lunlumo回答回数107ベストアンサー獲得回数142011/08/10 02:18:47ここでベストアンサー

case+group byでやるならこんな感じでしょうか。

select
  shouhinmei,
  sum(
    case
      when date between '2011-08-01' and '2011-08-31' then kosu
      else 0
    end
  ) as august,
  sum(
    case
      when date between '2011-09-01' and '2011-09-30' then kosu
      else 0
    end
  ) as september,
  sum(
    case
      when date between '2011-10-01' and '2011-10-31' then kosu
      else 0
    end
  ) as october
from 
  HassouKanriTB
group by
  shouhinmei;

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません