0

1.製品(製品表)

1.productid 

  001         
  002         
  003         

2.productname

  x
  y
  z

2.invoiceqty(InvoiceQuantityテーブル)

1.productid

  001       
  001      
  002       
  002 

2.invqty

  10
  20
  10
  05

3.grnqty(GRN数量テーブル)

1.productid 

  001        
  002        
  003        

2.grqty

  50
  50
  50

4.returninqty(数量テーブルでの返品)

1.productid 

  002
  002

2.retinqty

  02
  03

5.returnoutqty(返品数量テーブル)

1.productid 

  001
  001

2.retoutqty

  01
  01

このような株式残高の株式残高計算を表示するには、このクエリを実行する必要があります

(grnqty + returninqty)-(invoiceqty + returnoutqty)= StockBalance

このように在庫残高を計算するためのクエリを書く方法を教えてください私はjava/MySQLで在庫管理システムを開発しましたこのクエリで私を助けてください

6.株式(QUERY)

1.productid 

  001
  002
  003

2.Stockqty

  40
  33
  50
4

2 に答える 2

1

サブクエリを使用して、各テーブルの数量を計算してみてください。テーブル全体にデカルト積があるため、LEFTJOINでは機能しません。

SELECT
    p.productid,
(
    SELECT COALESCE(SUM(grnqty), 0) 
    FROM grnqty g 
    WHERE g.productid = p.productid
) 
 +
(
    SELECT COALESCE(SUM(returninqty), 0) 
    FROM returninqty ri 
    WHERE ri.productid = p.productid
)     
 - 
(
    SELECT COALESCE(SUM(invoiceqty), 0) 
    FROM invoiceqty i 
    WHERE i.productid = p.productid
)
 -
(
    SELECT COALESCE(SUM(returnoutqty), 0) 
    FROM returnoutqty ro 
    WHERE ro.productid = p.productid
) as stock

FROM products p

また、株式を計算する関数を作成することもできます。他のクエリに簡単に再利用できます。

DELIMITER $$

CREATE FUNCTION `get_product_stock` (IN p_id_product INT) RETURNS INT
BEGIN

DECLARE stock INT;

SET stock =
    (
        SELECT COALESCE(SUM(grnqty), 0)
        FROM grnqty
        WHERE productid = p_id_product
    )
     +
    (
        SELECT COALESCE(SUM(returninqty), 0)
        FROM returninqty
        WHERE productid = p_id_product
    )
     -
    (
        SELECT COALESCE(SUM(invoiceqty), 0)
        FROM invoiceqty
        WHERE productid = p_id_product
    )
     -
    (
        SELECT COALESCE(SUM(returnoutqty), 0)
        FROM returnoutqty
        WHERE productid = p_id_product
    );

RETURN stock;

END $$

DELIMITER ;

次のような関数を使用できます。

// get the stock for product with id 1
SELECT get_product_stock(1); 

// get all the products with their stock
SELECT productid, name, get_product_stock(productid) as stock FROM products; 
于 2012-06-22T07:38:39.103 に答える
0

このクエリは式に従っていますが、式に問題がある可能性があるため、表示された結果は生成されません

SELECT
  p.productid,

  (ifnull(g.g_sum,0) + ifnull(rq.rq_sum,0))-(ifnull(i.i_sum,0) + ifnull(ro.ro_sum,0)) as StockBalance,

  ifnull(g.g_sum,0) as GRN_QUANTITY,
 ifnull( rq.rq_sum,0) as RETURN_IN_QUANTITY,
 ifnull( i.i_sum,0) as INVENTORY_QUANTITY,
 ifnull( ro.ro_sum,0) as RETURN_OUT_QUANTITY
from products as p
  left join (select
           productid,
           sum(grnqty)  as g_sum
         from grnqty group by productid) as g
    on g.productid = p.productid
  left join (select
           productid,
           sum(retinqty) as rq_sum
         from returninqty group by productid) as rq
    on rq.productid = p.productid
  left join (select
           productid,
           sum(invqty)  as i_sum
         from invoiceqty group by productid) as i
    on i.productid = p.productid
  left join (select
           productid,
           sum(retoutqty) as ro_sum
         from returnoutqty group by productid) as ro
    on ro.productid = p.productid
于 2012-06-22T08:09:02.747 に答える