humaniOra …

Bikin Pivot Table di MySQL..

Ditulis dalam umum by humeora di/pada Juli 26th, 2007

huhh … binun , mo bikin report dari program , bikin report dari table mySQL yang recordnya itu jadi kolom . Nyari2 dehh … tentunya ke google lah !. gak lama2 akhirnya ketemu juga (secara google itu kan keren !! ) heheheh …

pertama sih bikin table dulu ..

CREATE TABLE exams ( pkey int(11) NOT NULL auto_increment,name varchar(15),
exam int, score int,PRIMARY KEY  (pkey));

trus insert data dech ke database !

insert into exams (name,exam,score) values ('Bob',1,75);
insert into exams (name,exam,score) values ('Bob',2,77);
insert into exams (name,exam,score) values ('Bob',3,78);
insert into exams (name,exam,score) values ('Bob',4,80);

insert into exams (name,exam,score) values ('Sue',1,90);

insert into exams (name,exam,score) values ('Sue',2,97);
insert into exams (name,exam,score) values ('Sue',3,98);
insert into exams (name,exam,score) values ('Sue',4,99);

dan setelah itu test tampilin data pake :

mysql> select * from exams;
+------+------+------+-------+
| pkey | name | exam | score |
+------+------+------+-------+
|    1 | Bob  |    1 |    75 |
|    2 | Bob  |    2 |    77 |
|    3 | Bob  |    3 |    78 |
|    4 | Bob  |    4 |    80 |
|    5 | Sue  |    1 |    90 |
|    6 | Sue  |    2 |    97 |
|    7 | Sue  |    3 |    98 |
|    8 | Sue  |    4 |    99 |
+------+------+------+-------+
8 rows in set (0.00 sec)

dan buat bikin query biar record jadi kolom syntaxnya kayak gini !

mysql> select name,sum(score*(1-abs(sign(exam-1)))) as exam1,
sum(score*(1-abs(sign(exam-2)))) as exam2,

sum(score*(1-abs(sign(exam-3)))) as exam3,

sum(score*(1-abs(sign(exam-4)))) as exam4

from exams group by name;

+------+-------+-------+-------+-------+
 name | exam1 | exam2 | exam3 | exam4 |

+------+-------+-------+-------+-------+
 Bob  |    75 |    77 |    78 |    80 |
| Sue  |    90 |    97 |    98 |    99 |

+------+-------+-------+-------+-------+
2 rows in set (0.00 sec)

btw .. gampang kan !!
silahkan mencoba! sorry kalo ada error ….

Leave a Reply