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