Điều này về cơ bản là một bảng trụ.
Một hướng dẫn tốt đẹp về cách đạt được điều này có thể được tìm thấy ở đây: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Tôi khuyên bạn nên đọc bài viết này và điều chỉnh giải pháp này cho nhu cầu của bạn.
Cập nhật
Sau khi liên kết ở trên hiện không còn khả dụng nữa, tôi cảm thấy bắt buộc phải cung cấp một số thông tin bổ sung cho tất cả các bạn đang tìm kiếm câu trả lời xoay vòng của mysql tại đây. Nó thực sự có một lượng thông tin khổng lồ và tôi sẽ không đưa mọi thứ từ đây vào đây (thậm chí nhiều hơn vì tôi không muốn sao chép kiến thức rộng lớn của họ), nhưng tôi sẽ đưa ra một số lời khuyên về cách đối phó với trục đặt bảng theo cách sql nói chung với ví dụ từ peku, người đã đặt câu hỏi ở vị trí đầu tiên.
Có lẽ liên kết quay lại sớm, tôi sẽ để mắt đến nó.
Cách bảng tính ...
Nhiều người chỉ sử dụng một công cụ như MSExcel, OpenOffice hoặc các công cụ bảng tính khác cho mục đích này. Đây là một giải pháp hợp lệ, chỉ cần sao chép dữ liệu ở đó và sử dụng các công cụ mà GUI cung cấp để giải quyết vấn đề này.
Nhưng ... đây không phải là câu hỏi và thậm chí nó có thể dẫn đến một số nhược điểm, như làm thế nào để đưa dữ liệu vào bảng tính, mở rộng có vấn đề, v.v.
Cách SQL ...
Cho bảng của anh ấy trông giống như thế này:
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;
Bây giờ hãy nhìn vào bảng mong muốn của anh ấy / cô ấy:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
Các hàng ( EMAIL
, PRINT x pages
) giống với điều kiện. Nhóm chính là bởi company_name
.
Để thiết lập các điều kiện, điều này thay vì sử dụng CASE
-statement. Để nhóm bởi một cái gì đó, tốt, sử dụng ... GROUP BY
.
SQL cơ bản cung cấp trục này có thể trông giống như thế này:
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`;
Điều này sẽ cung cấp kết quả mong muốn rất nhanh. Nhược điểm chính của cách tiếp cận này, càng nhiều hàng bạn muốn trong bảng trụ của bạn, bạn càng cần xác định nhiều điều kiện hơn trong câu lệnh SQL.
Điều này cũng có thể được xử lý, do đó mọi người có xu hướng sử dụng các tuyên bố, thói quen, quầy và chuẩn bị.
Một số liên kết bổ sung về chủ đề này: