Ini pada dasarnya adalah tabel pivot.
Sebuah tutorial yang bagus tentang cara mencapai ini dapat ditemukan di sini: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Saya menyarankan membaca posting ini dan menyesuaikan solusi ini dengan kebutuhan Anda.
Memperbarui
Setelah tautan di atas saat ini tidak tersedia lagi, saya merasa berkewajiban untuk memberikan beberapa informasi tambahan untuk Anda semua yang mencari jawaban pivot mysql di sini. Itu benar-benar memiliki sejumlah besar informasi, dan saya tidak akan meletakkan semuanya dari sana di sini (bahkan lebih karena saya hanya tidak ingin menyalin pengetahuan mereka yang luas), tetapi saya akan memberikan saran tentang cara menangani pivot tabel cara sql umumnya dengan contoh dari peku yang mengajukan pertanyaan di tempat pertama.
Mungkin tautannya segera kembali, saya akan mengawasinya.
Cara spreadsheet ...
Banyak orang hanya menggunakan alat seperti MSExcel, OpenOffice atau alat spreadsheet lainnya untuk tujuan ini. Ini adalah solusi yang valid, cukup salin data di sana dan gunakan alat yang ditawarkan GUI untuk menyelesaikannya.
Tapi ... ini bukan pertanyaannya, dan bahkan mungkin menyebabkan beberapa kerugian, seperti bagaimana memasukkan data ke dalam spreadsheet, penskalaan yang bermasalah, dan sebagainya.
Cara SQL ...
Mengingat mejanya terlihat seperti ini:
CREATE TABLE `test_pivot` (
`pid` bigint(20) NOT NULL AUTO_INCREMENT,
`company_name` varchar(32) DEFAULT NULL,
`action` varchar(16) DEFAULT NULL,
`pagecount` bigint(20) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=MyISAM;
Sekarang lihat ke meja yang diinginkan:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
Baris ( EMAIL
, PRINT x pages
) menyerupai kondisi. Pengelompokan utama adalah dengan company_name
.
Untuk mengatur kondisi ini lebih baik berteriak untuk menggunakan CASE
pernyataan. Untuk kelompok oleh sesuatu, baik, penggunaan ... GROUP BY
.
SQL dasar yang menyediakan pivot ini dapat terlihat seperti ini:
SELECT P.`company_name`,
COUNT(
CASE
WHEN P.`action`='EMAIL'
THEN 1
ELSE NULL
END
) AS 'EMAIL',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '1'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 1 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '2'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 2 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '3'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 3 pages'
FROM test_pivot P
GROUP BY P.`company_name`;
Ini harus memberikan hasil yang diinginkan dengan sangat cepat. Kelemahan utama untuk pendekatan ini, semakin banyak baris yang Anda inginkan dalam tabel pivot Anda, semakin banyak kondisi yang perlu Anda tetapkan dalam pernyataan SQL Anda.
Ini dapat diatasi juga, oleh karena itu orang cenderung menggunakan pernyataan, rutinitas, penghitung dan semacamnya.
Beberapa tautan tambahan tentang topik ini: