人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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|

●質問者: たつ
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:10月 9月 aaa CASE CCC
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● morinatsu

標準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月)の順)
aaa603030
bbb603030
ccc303030

2 ● lunlumo
ベストアンサー

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;
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ