Rumah > Soal Jawab > teks badan
P粉3688781762023-08-24 17:12:04
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粉3842444732023-08-24 14:49:27
Ini pada asasnya jadual pangsi.
Tutorial yang baik 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
Selepas pautan di atas tidak lagi tersedia buat masa ini, saya merasakan keperluan untuk memberikan beberapa maklumat tambahan untuk sesiapa yang mencari di sini untuk jawapan mysql hub. Ia mempunyai banyak maklumat, saya tidak akan meletakkan semuanya di sini (atau lebih, kerana saya tidak mahu meniru pengetahuan mereka yang luas), tetapi saya akan memberikan beberapa nasihat tentang cara menangani pangsi secara umum dalam jadual Kaedah sql, mengambil peku yang mula-mula bertanya soalan sebagai contoh.
Mungkin pautan akan kembali tidak lama lagi, saya akan memerhatikannya.
Kaedah hamparan...
Ramai orang hanya menggunakan MSExcel, OpenOffice atau alat hamparan lain untuk tujuan ini. Ini adalah penyelesaian yang berfungsi, hanya salin data di sana dan gunakan alat yang disediakan oleh GUI untuk menyelesaikan masalah.
Tetapi... ini bukan masalah, malah mungkin membawa kepada beberapa keburukan seperti cara memasukkan data ke dalam hamparan, isu dengan penskalaan, dsb.
SQL cara...
Memandangkan bentuknya 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;
Lihat borang yang dia mahu sekarang:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages ------------------------------------------------------------- CompanyA 0 0 1 3 CompanyB 1 1 2 0
OK (电子邮件
、打印 x 页
)类似于条件。主要分组是按company_name
.
Untuk menetapkan syarat, anda perlu menggunakan <代码>CASE-penyataan. Untuk mengumpulkan mengikut sesuatu, gunakan...GROUP BY
.
SQL asas untuk menyediakan 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 diinginkan dengan cepat. Kelemahan utama pendekatan ini ialah lebih banyak baris yang anda inginkan dalam Jadual Pangsi, lebih banyak syarat yang anda perlu tentukan dalam pernyataan SQL.
Ini juga boleh dikendalikan, jadi orang ramai cenderung menggunakan kenyataan, rutin, kaunter, dsb.
Beberapa pautan lain mengenai topik ini: