В основном это - сводная таблица.
Хороший учебник о том, как этого достичь, можно найти здесь: http://www.artfulsoftware.com/ Обновить
g15]
После того, как ссылка выше в настоящее время недоступна, я чувствую себя обязанным предоставить дополнительную информацию для всех вас, ищущих ответы на mysql pivot. У него действительно было огромное количество информации, и я не буду вкладывать все оттуда сюда (еще больше, так как я просто не хочу копировать свои обширные знания), но я дам несколько советов о том, как справляться с точкой опоры таблицы sql в общем случае с примером из peku, который задал вопрос в первую очередь.
Возможно, ссылка скоро вернется, я буду следить за ней.
Метод электронной таблицы ...
Для этой цели многие используют инструмент 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-заявлении.
Это также может быть рассмотрено, поэтому люди склонны использовать подготовленные операторов, подпрограмм, счетчиков и т. д.
Некоторые дополнительные ссылки по этой теме:
Единственный способ, с помощью которого я могу фильтровать представление трассировки стека, - через Mylyn. Если у вас есть активная задача Mylyn, и вы нажмете кнопку «Фокус на активную задачу (экспериментальный)» в окне «Отладка», тогда трассировка стека будет отфильтрована только для отображения тех методов, которые находятся в контексте текущей задачи.
В этом случае вы не будете фильтровать определенные элементы из трассировки стека; скорее всего, все будет отсутствовать по умолчанию, и будут отображаться только некоторые элементы (в контексте задачи).
Вы можете посмотреть этот ответ для получения дополнительной информации о Mylyn.
Подготовка. Вы можете использовать шаговые фильтры , как описано здесь здесь . Затем всякий раз, когда вы выполняете отладку через свой код, он не переходит в исключенные пакеты или классы, например. от JDK или некоторых фреймворков, таких как Hibernate или Spring. Но это всего лишь предварительное условие.
Решение: stacktrace все еще содержит фреймы из этих пакетов. Чтобы отфильтровать их, вам необходимо исправить плагин Eclipse JDT Debug UI . Кто-то еще сделал это уже для более старых выпусков Eclipse до Indigo. Поскольку мне было любопытно, могу ли я запустить его в текущем выпуске Luna 4.4.1, я воссоздал изменения другого парня и нажал Debug View + Stack Filter Plug-In до GitHub, включая ссылку для загрузки исправленного плагина. Так что, если вы тоже на 4.4.1, вам повезло, и вам не нужно патч и компилировать что-либо самостоятельно. Просто используйте мою версию. В противном случае, пожалуйста, клонируйте мое репо и посмотрите на изменения, а затем примените их к версии плагина по вашему выбору.