CASE
式で集計関数を使用して、データをピボットできます。
select studentenrollid,
count(case when studentstatus = '0' then studentid end) InActive,
count(case when studentstatus = '1' then studentid end) Active,
count(case when studentstatus = '2' then studentid end) Deleted
from yourtable
group by studentenrollid
SQL FiddlewithDemoを参照してください。
結果は次のとおりです。
| STUDENTENROLLID | INACTIVE | ACTIVE | DELETED |
-------------------------------------------------
| 3 | 0 | 2 | 1 |
| 7 | 0 | 1 | 0 |
| 8 | 0 | 1 | 0 |
| 9 | 1 | 0 | 0 |
コメントに配置したサンプルデータを使用して、#1を編集します。
CREATE TABLE IF NOT EXISTS demo
(
studentid int(11) NOT NULL AUTO_INCREMENT,
studentenrollid int(11) NOT NULL,
studentstatus enum('0','1','2') NOT NULL DEFAULT '1',
PRIMARY KEY (studentid),
KEY studentenrollid (studentenrollid)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=84 ;
INSERT INTO demo (studentid, studentenrollid, studentstatus)
VALUES
(22, 41, '2'),
(23, 1,'1'),
(24, 2, '1'),
(25, 3, '1'),
(26, 41, '1'),
(29, 41, '1'),
(30, 41, '1'),
(31, 41, '1'),
(32, 41, '1'),
(33, 41, '1'),
(34, 41,'1'),
(35, 41, '1'),
(36, 41, '1'),
(37, 41, '1')
クエリは次のようになります。
select studentenrollid,
count(case when studentstatus = '0' then studentid end) InActive,
count(case when studentstatus = '1' then studentid end) Active,
count(case when studentstatus = '2' then studentid end) Deleted
from demo
group by studentenrollid
結果(デモ付きのSQLフィドルを参照):
| STUDENTENROLLID | INACTIVE | ACTIVE | DELETED |
-------------------------------------------------
| 1 | 0 | 1 | 0 |
| 2 | 0 | 1 | 0 |
| 3 | 0 | 1 | 0 |
| 41 | 0 | 10 | 1 |
データベース(少なくともサンプルデータ)にある唯一の値であるため、削除されたカウントのみを取得していることに注意してください。