Rumah > Soal Jawab > teks badan
P粉6968918712023-08-23 00:33:40
Penyelesaian saya ialah menggunakan T-SQL tanpa sebarang pivot:
SELECT CompanyName, SUM(CASE WHEN (action='EMAIL') THEN 1 ELSE 0 END) AS Email, SUM(CASE WHEN (action='PRINT' AND pagecount=1) THEN 1 ELSE 0 END) AS Print1Pages, SUM(CASE WHEN (action='PRINT' AND pagecount=2) THEN 1 ELSE 0 END) AS Print2Pages, SUM(CASE WHEN (action='PRINT' AND pagecount=3) THEN 1 ELSE 0 END) AS Print3Pages FROM Company GROUP BY CompanyName
P粉6086470332023-08-23 00:17:57
Ini pada asasnya jadual pangsi.
Tutorial terperinci tentang cara melaksanakan ini boleh didapati di sini: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Saya mengesyorkan membaca artikel ini dan menyesuaikan penyelesaian ini mengikut keperluan anda.
Dikemas kini
Memandangkan pautan di atas tidak lagi tersedia buat masa ini, saya rasa bertanggungjawab untuk memberikan beberapa maklumat tambahan bagi sesiapa yang mencari jawapan kepada jadual pangsi mysql di sini. Ia mempunyai banyak maklumat, dan saya tidak akan menyalin segala-galanya di sini (apatah lagi saya tidak mahu menyalin pengetahuan mereka yang luas), tetapi saya akan memberi nasihat tentang cara bekerja dengan jadual pangsi dengan cara SQL, dan pertama Contoh peku yang bertanya soalan.
Mungkin pautan akan kembali tidak lama lagi, saya akan memerhatikannya.
Kaedah hamparan...
Ramai orang hanya menggunakan alat hamparan seperti MSExcel, OpenOffice atau lain-lain untuk tujuan ini. Ini adalah penyelesaian yang sah, hanya salin data di sana dan gunakan alat yang disediakan oleh GUI untuk menyelesaikan masalah.
Tetapi...ini bukan punca masalah, malah mungkin membawa kepada beberapa kelemahan, seperti cara mengimport data ke dalam hamparan, isu kebolehskalaan, dsb.
SQL cara...
Andaikan jam tangannya kelihatan 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 jadual apa yang dia jangkakan:
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
)表示条件。主要的分组是按company_name
dijalankan.
Untuk menetapkan syarat, adalah lebih sesuai untuk menggunakan pernyataan CASE
语句。为了按某个东西进行分组,使用...GROUP BY
. Untuk mengumpulkan mengikut sesuatu, gunakan...GROUP BY
.
SQL asas untuk menyediakan jadual pangsi ini mungkin kelihatan 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 sepatutnya memberikan hasil yang diingini dengan cepat. Kelemahan utama pendekatan ini ialah lebih banyak baris yang anda perlukan dalam jadual pangsi, lebih banyak syarat yang perlu anda tentukan dalam pernyataan SQL.
Ini juga boleh diselesaikan, jadi orang ramai cenderung menggunakan kenyataan, rutin, kaunter, dsb.
Beberapa pautan tambahan mengenai topik ini: