查询制作销售报告

时间:2009-09-14 18:50:28

标签: sql mysql

我将order_lines的数据库架构设为

product_id, quantity, created_at

我想查询结果

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

可以在mySQL中执行此操作吗?

3 个答案:

答案 0 :(得分:1)

是的,我的交叉表查询应该可以解决问题。

这可能会有所帮助: http://forums.mysql.com/read.php?20,110464,110464

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

答案 1 :(得分:0)

select product_id, sum(quantity) from order_lines group_by product_id 

答案 2 :(得分:0)

这是一个可能的解决方案。您可能需要对其进行修改以满足您的需求:

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           

希望这有帮助!

编辑: 总之,这样做是为了创建一个生成动态SQL字符串的存储过程。然后它执行该查询。这就是为什么这需要在存储过程中。 indiecompanyllc指出我刚才用过的一篇很棒的文章来学习如何做到这一点。以下是该链接:http://rpbouman.blogspot.com/2005/10/creating-crosstabs-in-mysql.html