Pada MySQL mempunyai Tabel seperti ini :
Sedangkan yang dibutuhkan hasilnya seperti ini :
Script Tabel Nilai
-- -- Table structure for table `Nilai` -- DROP TABLE IF EXISTS `Nilai`; CREATE TABLE `Nilai` ( `ID_NILAI` int(11) NOT NULL, `SISWA` varchar(45) NOT NULL, `MATA_PELAJARAN` varchar(45) NOT NULL, `KELAS` varchar(10) NOT NULL, `NILAI_AKHIR` int(11) DEFAULT '0', PRIMARY KEY (`ID_NILAI`,`SISWA`,`MATA_PELAJARAN`,`KELAS`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Dumping data for table `Nilai` -- INSERT INTO `Nilai` VALUES (1,'BUDI','KOMPUTER','IA',80),(2,'ANI','KOMPUTER','IA',70), (3,'ACENG','BAHASA INDONESIA','IA',90),(4,'BUDI','BAHASA INDONESIA','IA',80), (5,'ANI','BAHASA INDONESIA','IA',85),(6,'ACENG','KOMPUTER','IA',70), (7,'BUDI','FISIKA','IA',80),(8,'ACENG','FISIKA','IA',80), (9,'ACENG','FISIKA','IA',87),(10,'JONO','KOMPUTER','IIA',80), (11,'JOKO','KOMPUTER','IIA',78),(12,'DEKO','KOMPUTER','IIA',95);
Berikut Script MySQL-nya untuk membuat CrossTab yang dinamis
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(case when `MATA_PELAJARAN` = ''', `MATA_PELAJARAN`, ''' then NILAI_AKHIR end) AS `', `MATA_PELAJARAN`, '`' ) ORDER BY MATA_PELAJARAN, SISWA ASC SEPARATOR ',\n' ) INTO @sql from Nilai; SET @sql = CONCAT('SELECT ID_NILAI, SISWA, KELAS,', @sql, 'from Nilai GROUP BY ID_NILAI, SISWA, KELAS'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Silahkan unduh Source-nya disini
0 comments:
Posting Komentar