2014-09-10 50 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 $$