SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.06.2010 12:26:32

Артём
Участник
Зарегистрирован: 24.02.2010
Сообщений: 13

crosstab в MySQL

Доброго времени суток! Примерная таблица.

CREATE TABLE IF NOT EXISTS `profit` (
  `date` DATE NOT NULL,
  `desc` tinytext NOT NULL,
  `amount` int(11) NOT NULL) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

INSERT INTO `profit` (`date`, `desc`, `amount`) VALUES
('2010-01-01', 'costs_1', 1000),
('2010-02-01', 'costs_2', 500),
('2010-03-01', 'profit_1',  5000),
('2010-05-01', 'profit_2', 50),
('2010-06-01', 'costs_1', 200),
('2010-07-01', 'costs_2', 1500),
('2010-11-01', 'profit_1', 2000),
('2010-12-01', 'profit_2', 1000);

реально сделать одним запросом подобие crosstab, где столбцы - месяцы (причем даже если нет данных по, к примеру, апрелю, он все равно отображается со значением NULL), а в строках группирование по desc?

например:

   01   02   03   04   05   06   07   08   09   10   11   12

1000    n     n    n    n    200  n     n     n     n    n    n
   n    500    n   n     n    n    1500 n     n     n    n    n
   n     n   5000  n    n    n     n     n     n     n  2000  n
   n     n      n    n   50    n    n     n     n     n    n    1000

Неактивен

 

#2 16.06.2010 14:04:18

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: crosstab в MySQL

Я все-таки удивляюсь, кому может это понадобиться?

SELECT SUM(IF(MONTH(`date`)=1, `amount`, 0)), …
FROM `profit`
GROUP BY `desc`;

Неактивен

 

#3 16.06.2010 19:08:52

Артём
Участник
Зарегистрирован: 24.02.2010
Сообщений: 13

Re: crosstab в MySQL

Примерно такой запрос понадобился для одного из отчетов в CRM нашему бухгалтеру.
Я про If для каждого месяца не додумался. Спасибо большое, выручили!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson