■やりたいこと
同一テーブルから別条件でデータを取得したいのですが、うまく実現できませんでした・・・。
具体的には、下記のようなテーブルから
---------------------------
ID | ユーザ | 体重 | 日付
---------------------------
1 | 1 | 50 | 20日
---------------------------
2 | 1 | 49 | 21日
---------------------------
3 | 2 | 60 | 20日
---------------------------
4 | 3 | 55 | 22日
---------------------------
以下のような表を抽出できれば・・・と頭を悩ませています。
---------------------------
ユーザ | 20日 | 21日 | 22日
---------------------------
1 | 50 | 49 | NULL
---------------------------
2 | 60 | NULL | NULL
---------------------------
3 | NULL | NULL | 55
---------------------------
そもそも出来るのかどうかも含めてご教授いただけないでしょうか。
よろしくお願い致します。
SUMを使ってるのでNullではなくゼロになってしまうけど、
そこのところはphpとかのほうでゼロは空白に置き換えるなどの処理をすればいいと思うので・・・
SELECT `ユーザ` , SUM(CASE WHEN `日付` = '20日' THEN `体重` ELSE 0 END) AS `20日` , SUM(CASE WHEN `日付` = '21日' THEN `体重` ELSE 0 END) AS `21日` 中略 , SUM(CASE WHEN `日付` = '31日' THEN `体重` ELSE 0 END) AS `31日` FROM `テーブル` GROUP BY `ユーザ`;
訂正です
すみません
SELECT `ユーザ` , SUM(CASE WHEN `日付` = '20日' THEN `体重` END) AS `20日` , SUM(CASE WHEN `日付` = '21日' THEN `体重` END) AS `21日` 中略 , SUM(CASE WHEN `日付` = '31日' THEN `体重` END) AS `31日` FROM `テーブル` GROUP BY `ユーザ`;
まさかこんなにすぐに回答をいただけるとは・・・。
教えていただいた方法で、無事に解決することができました。
SQLにCASE式という便利な技があることを初めて知りました。
(完全に勉強不足です。。)
本当にありがとうございましたっ!
2011/10/26 19:44:55