นี่คือตารางสาระสำคัญ
บทแนะนำที่ดีเกี่ยวกับวิธีการบรรลุเป้าหมายสามารถพบได้ที่นี่: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
ผมแนะนำให้อ่านโพสต์นี้และปรับแก้ปัญหานี้ให้เหมาะกับความต้องการของคุณ
ปรับปรุง
หลังจากลิงค์ด้านบนไม่สามารถใช้งานได้อีกต่อไปฉันรู้สึกว่าจำเป็นต้องให้ข้อมูลเพิ่มเติมบางอย่างสำหรับคุณทุกคนที่ค้นหาคำตอบของ mysql pivot ในที่นี่ มีข้อมูลจำนวนมากจริง ๆ และฉันจะไม่ใส่ทุกอย่างจากที่นี่ (ยิ่งกว่านั้นเพราะฉันไม่ต้องการคัดลอกความรู้มากมาย) แต่ฉันจะให้คำแนะนำเกี่ยวกับวิธีจัดการกับเดือย ตารางวิธี sql โดยทั่วไปพร้อมตัวอย่างจาก peku ที่ถามคำถามในสถานที่แรก
บางทีลิงก์จะกลับมาเร็ว ๆ นี้ฉันจะจับตาดูมัน
วิธีสเปรดชีต ...
หลายคนใช้เครื่องมือเช่น MSExcel, OpenOffice หรือเครื่องมือสเปรดชีตอื่น ๆ เพื่อจุดประสงค์นี้ นี่เป็นทางออกที่ถูกต้องเพียงคัดลอกข้อมูลตรงนั้นและใช้เครื่องมือที่ GUI เสนอเพื่อแก้ไขปัญหานี้
แต่ ... นี่ไม่ใช่คำถามและอาจนำไปสู่ข้อเสียบางประการเช่นวิธีนำข้อมูลลงในสเปรดชีตการปรับขนาดที่มีปัญหาและอื่น ๆ
วิธี SQL ...
ให้ตารางของเขามีลักษณะดังนี้:
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;
ตอนนี้ดูที่ตารางที่ต้องการของเขา / เธอ:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
แถว ( EMAIL
, PRINT x pages
) คล้ายกับเงื่อนไข company_name
การจัดกลุ่มโดยหลักคือ
เพื่อที่จะตั้งค่าเงื่อนไขนี้ค่อนข้างตะโกนสำหรับการใช้CASE
-statement ในการสั่งซื้อเพื่อจัดกลุ่มตามสิ่งที่ดีใช้ GROUP BY
...
SQL พื้นฐานที่ให้ pivot นี้สามารถมีลักษณะดังนี้:
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`;
ควรให้ผลลัพธ์ที่ต้องการอย่างรวดเร็ว ข้อเสียที่สำคัญสำหรับวิธีการนี้ยิ่งคุณต้องการแถวในตารางเดือยมากเท่าไหร่คุณก็จะต้องกำหนดเงื่อนไขเพิ่มเติมในคำสั่ง SQL ของคุณ
สิ่งนี้สามารถแก้ไขได้เช่นกันดังนั้นผู้คนมักจะใช้คำสั่งที่เตรียมไว้, กิจวัตร, ตัวนับและสิ่งที่เตรียมไว้
ลิงก์เพิ่มเติมบางส่วนเกี่ยวกับหัวข้อนี้: