Запрос на создание отчета о продаже - PullRequest
0 голосов
/ 14 сентября 2009

У меня есть схема базы данных order_lines как

product_id, quantity, created_at

Я хочу запросить результат как

date               1 2 3 4 5 ..
product 1 count    2 ...  
product 2 count    5 ...

Возможно ли это сделать в MySQL?

Ответы [ 3 ]

1 голос
/ 14 сентября 2009

Да, я должен выполнить кросс-таб-запрос.

Это может быть полезно: http://forums.mysql.com/read.php?20,110464,110464

http://rpbouman.blogspot.com/2005/10/creating-crosstabs-in-mysql.html

0 голосов
/ 15 сентября 2009

Вот возможное решение. Возможно, вам придется изменить его в соответствии с вашими потребностями:

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`ordertotals` $$
CREATE PROCEDURE `test`.`ordertotals` ()
BEGIN
  DECLARE `xtab_qry` VARCHAR(4096) DEFAULT '';

  SELECT CONCAT('SELECT o.product_id ',
                 GROUP_CONCAT(
                     DISTINCT
                     CONCAT(', SUM(IF(o.created_at="', ol.created_at,
                            '",o.quantity,null)) AS "',
                            DATE_FORMAT(ol.created_at, "%m/%d/%Y"),
                            '"')
                      ORDER BY ol.created_at
                      SEPARATOR ''
                     ),
                     ' FROM orderlines o WHERE 1 GROUP BY o.product_id'
             ) AS stuff
        INTO
            @xtab_qry
        FROM
            orderlines ol
        WHERE 1;

        PREPARE my_sql_statement
        FROM @xtab_qry;

        EXECUTE my_sql_statement;

        DEALLOCATE
        PREPARE my_sql_statement;
END $$

DELIMITER ;

С данными этого теста:

product_id  quantity    created_at
1           4           2009-09-14
1           5           2009-09-14
2           2           2009-09-14
3           3           2009-09-13
1           9           2009-09-15
1           2           2009-09-16

Он дал такие результаты:

product_id  09/13/2009  09/14/2009  09/15/2009  09/16/2009
1                       9           9           2
2                       2       
3           3           

Надеюсь, это поможет!

EDIT: Таким образом, это создает хранимую процедуру, которая генерирует динамическую строку SQL. Затем он выполняет этот запрос. Вот почему это должно быть в хранимой процедуре. indiecompanyllc указал на замечательную статью, которую я использовал некоторое время назад, чтобы узнать, как это сделать. Вот эта ссылка: http://rpbouman.blogspot.com/2005/10/creating-crosstabs-in-mysql.html.

0 голосов
/ 14 сентября 2009
select product_id, sum(quantity) from order_lines group_by product_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...