Це в основному є зведена таблиця.
Гарний підручник про те, як цього досягти, ви можете прочитати тут: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Раджу прочитати цю публікацію та адаптувати це рішення до ваших потреб.
Оновлення
Після того, як посилання вище в даний час більше не доступне, я відчуваю обов'язок надати деяку додаткову інформацію для всіх вас, хто шукає сюди відповіді mysql. У неї дійсно було величезна кількість інформації, і я не буду вкладати все звідси сюди (тим більше, що я просто не хочу копіювати їх величезні знання), але я дам кілька порад, як боротися зі стрижком. наводить таблицю sql, як правило, на прикладі пеку, який задав питання в першу чергу.
Можливо, посилання повернеться незабаром, я буду стежити за цим.
Спосіб електронної таблиці ...
Багато людей просто використовують для цієї мети такий інструмент, як MSExcel, OpenOffice або інші електронні таблиці. Це вірне рішення, просто скопіюйте дані туди і використовуйте інструменти, які пропонує графічний інтерфейс для вирішення цього питання.
Але ... це не питання, і це навіть може призвести до деяких недоліків, як, наприклад, як занести дані в електронну таблицю, проблематичне масштабування тощо.
Шлях 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
-повідання. Для того , щоб згрупувати по чому - то, ну, використання ... GROUP BY
.
Основний SQL, що забезпечує цей стрижень, може виглядати приблизно так:
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.
З цим теж можна впоратися, тому люди, як правило, використовують підготовлені заяви, процедури, лічильники тощо.
Деякі додаткові посилання на цю тему: