2014-09-10 61 views
0

我需要关于如何创建报告的建议,该报告将显示第一列中的产品列表,随后的列将是时间段。MYSQL:需要帮助创建一份库存消耗报告

库存表具有以下字段:

STOCK_ID StockQty InStock_Date UsageRate

什么我希望做的是看每个股票项目,并通过使用其使用率插槽值进入未来的时间段。

例如,如果ProductA当前有库存,库存数量为100,每周使用率为10,那么我将需要用数量为10的下10周填充报表。 产品B可能有库存数量为30,每周使用率为4 /周,所以我需要在接下来的7周内填充表格的下一行,值为4,第8周与股票的其余部分,2.等等剩下的产品。

进一步的要求是处理将来例如5周后进入的产品。我想执行上述操作,但首周将是第5周。

我想要做的另一件事是对上述数据进行计算,例如将每周数量乘以产品的售价以获得预计收入按周计算。

我使用MYSQL 5,并尝试以下解决方案:

CREATE PROCEDURE sp_DBR_Inventory_Test() 
    BEGIN 
    DECLARE i INT Default 0; 
    declare Max_Period_Id int(3) default 0; 
    select max(ceiling(Stock_QTY/Stock_Usage)) 
     from hilmark.stock 
     into Max_Period_Id; 

    simple_loop: 
     LOOP SET i=i+1; 
     select Stock_Id, 
      Stock_Usage 
     from hilmark.stock; 
     IF i=Max_Period_Id THEN LEAVE simple_loop; END IF; 
    END LOOP simple_loop; 
    END 

任何帮助将非常感激。

干杯

杰克

+0

能否请你发表你试过到目前为止 – 2014-09-10 09:50:17

+0

我一直在尝试下面的代码是什么样:CREATE PROCEDURE'sp_DBR_Inventory_Test'() BEGIN DECLARE我INT默认值0; 声明Max_Period_Id int(3)默认为0; 从hilmark选择max(ceiling(Stock_QTY/Stock_Usage))。存入Max_Period_Id; simple_loop:LOOP SET i = i + 1; select Stock_Id, Stock_Usage from hilmark.stock; IF i = Max_Period_Id THEN LEAVE simple_loop; END IF; END LOOP simple_loop; END $$ I – ajdjackson 2014-09-10 19:42:13

回答

0

我已经通过创建一个临时表和报告解决以上。

CREATE PROCEDURE `sp_DBR_Inventory_Test`() 

BEGIN

DECLARE I INT缺省值0; 声明Max_Period_Id int(3)默认为0;

select max(ceiling(Stock_QTY/Stock_Usage)) 
    from hilmark.stock 
    into Max_Period_Id; 

CREATE TEMPORARY TABLE salestimeline_tmp( STOCK_ID INT(4),Period_ID INT(2),Sales_Qty INT(3));

simple_loop: LOOP 

SET i=i+1; 

insert into salestimeline_tmp 

    select a.Stock_Id, 
     i, 
     case 
     when a.Stock_Usage*i >= a.Stock_Qty 
     then 
      case 
      when (a.Stock_Usage*i-a.Stock_Qty) < a.Stock_Usage then (a.Stock_Qty-a.Stock_Usage*(i-1)) 
      else 
      0 
      end 
     else 
     a.Stock_Usage 
     end as SUsage 

    from hilmark.stock a; 

    IF i=Max_Period_Id THEN LEAVE simple_loop; 

    END IF; 

END LOOP simple_loop; 

select * from salestimeline_tmp;

END $$