![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こういうテーブル「tb」があるとします。
「tb」
bang nama tuki
A103 佐藤 4
A102 高橋 5
A104 鈴木 4
A101 中川 4
A103 渡辺 5
A101 西沢 5
A102 中村 6
A104 田中 5
A103 村井 6
A107 吉田 6
A101 小林 4
これを、実行後に、
bang 4月 5月 6月
A101 中川 西沢 NULL
A102 NULL 高橋 中村
A103 佐藤 渡辺 村井
A104 鈴木 田中 NULL
A107 NULL NULL 吉田
このように、共通するbangで並べ替えたいのです。
A101の4月は、「中川」と「小林」で重複していますが、
このときはひとりだけが選択されてほしいです。
SELECT
CONCAT(CASE
WHEN tuki='4' THEN name
ELSE IFNULL(null,'')
END) AS '4月',
~
GROUP BY bang
~
としても、
bang 4月 5月 6月
A101 中川
となってしまい、5月と6月が上手く表示されません。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
あ、よくよく考えたらこの程度ならピボットしなくてもかけますね
ピボットの場合もう少し複雑な集計をとるとき便利です。
もちろん今回のケースでも活用できます
//例
select bang
,max(if(tuki=4,name,null)) as 4月
,max(if(tuki=5,name,null)) as 5月
,max(if(tuki=6,name,null)) as 6月
from tb as t
group by bang
order by bang;
//ちなみに2名以上いるときの列記
select bang
,group_concat(if(tuki=4,name,null)) as 4月
,group_concat(if(tuki=5,name,null)) as 5月
,group_concat(if(tuki=6,name,null)) as 6月
from tb as t
group by bang
order by bang;
//各bangに月ごと何人いるかカウントする
select bang
,sum(tuki=4) as 4月
,sum(tuki=5) as 5月
,sum(tuki=6) as 6月
from tb as t
group by bang
order by bang;
おお!うまく表示されました!文字列にMAXって使えたんですね……。
2名以上や人数のカウントも勉強になりました!
ピボットテーブルもしっかり頭に入れておきます!
ありがとうございました!
助かりました!
No.1
- 回答日時:
この手の処理にはピボットテーブルを使うと処理が楽です
//元データ
create table tb (bang varchar(10),name varchar(10),tuki int);
insert into tb values('A103','佐藤',4),('A102','高橋',5),('A104','鈴木',4),('A101','中川',4),('A103','渡辺',5),('A101','西沢',5),('A102','中村',6),('A104','田中',5),('A103','村井',6),('A107','吉田',6),('A101','小林',4);
//ピボットテーブル
create table pivot(month int,m4 int null,m5 int null,m6 int null);
insert into pivot(month,m4) values(4,1);
insert into pivot(month,m5) values(5,1);
insert into pivot(month,m6) values(6,1);
//結果
select bang
,max(if(m4,name,null)) as 4月
,max(if(m5,name,null)) as 5月
,max(if(m6,name,null)) as 6月
from tb as t
inner join pivot as p on t.tuki=p.month
group by bang
order by bang;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 野球 世界一ですか 4 2022/11/11 06:17
- 野球 世界一ですか 2 2022/11/11 06:15
- 野球 日本代表 これで世界一ですか 2 2022/11/11 05:59
- タレント・お笑い芸人 食わず嫌い復活して欲しいですか? 1 2023/02/22 22:45
- その他(音楽・ダンス・舞台芸能) どの時代のミュージックステーションが一番豪華ですか? 86年 10月24日チェッカーズ、早見優、ジャ 2 2022/12/28 19:26
- 野球 この中で1番凄いのはどれ? 5 2022/12/31 17:30
- タレント・お笑い芸人 種なし 2 2022/06/22 00:30
- 野球 高校野球の話 1 2022/08/18 09:54
- 野球 WBC 1 2023/03/07 15:26
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL教えてください。
-
WHERE `年月日` = '晴' OR `年...
-
あってますか?SQL
-
SQLです 教えてください。お願...
-
テーブル名が可変の場合のクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
エラー 1068 (42000): 複数の主...
-
SQLを作ったのですがうまくいき...
-
SQLです教えてくださいお願いし...
-
【初歩】ラジオボタンをつかっ...
-
SQL任意に並び替えをしたい
-
SQLでカラムを追加し、条件に合...
-
PHP 画像のアップロード Qiita
-
BGMを教えてほしいです!
-
PHPとMySQLを使った掲示板の作り方
-
2つのテーブルを結合するときに...
-
SQLで抽出してCSVで書き出した...
-
データベースの接続に失敗して...
-
(初心者)MySQLやmaraDBで、crea...
-
mysqlがインストールされている...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Null値が入れられない
-
nullと同じく空白をCountしない...
-
SQLでLIMIT句を入れるとエラー...
-
NULLを含む列の足し算
-
SQL文を入力したらエラー
-
テーブル作成時に、「`id` int(...
-
MySQLの特定のカラムの内容を全...
-
phpとSQLで複数条件で検索する...
-
複雑なSQLですが、教えてくださ...
-
MySQLで関連したデータを横に並...
-
phpでnot null、a_iでテーブル作成
-
SQLのコマンドでif構文
-
【初歩】 SELECT文で意図した照...
-
MySQLで項目の反復定義(COBOL...
-
MySQLで同じデータにフラグ付け...
-
計算結果でtrueならフラグをつ...
-
質問内容の仕様のSQLがわからな...
-
mysqlのselectについて
-
MySQLでのテーブル名取得に制限...
-
SQL文でダブルクォートか
おすすめ情報