2012-06-22 2 views
0

1.Products (продукты) ТаблицаРасчет и несколько соединений в MySQL

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 (Return В таблице Количество)

1.productid 

    002 
    002 

2.retinqty 

    02 
    03 

5.returnoutqty (Return Out Количество Таблица)

1.productid 

    001 
    001 

2.retoutqty 

    01 
    01 

Мне нужно выполнить этот запрос для просмотра складских остатков stockbalance расчет как это

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

Пожалуйста скажите мне, как написать запрос для вычисления запаса баланса, как этот я имею разработать систему управления запасами в Java/MySQL, пожалуйста, помогите мне в этом запросе

6.Stocks (QUERY)

1.productid 

    001 
    002 
    003 

2.Stockqty 

    40 
    33 
    50 
+0

Вы застряли в запросе, который не возвращает ожидаемый результат, или вы просто ищете заявление, которое будет делать то, что вы описываете? –

ответ

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 
+0

Спасибо, мистер Рахил Шан! его работа .. Большое спасибо, нам нужна ваша помощь подробнее .. Еще раз спасибо .. – Rajive

+0

Насколько я помню mysql я доступен –

1

Попробуйте вычислить количества для каждой таблицы, используя подзапрос. Он не работает с LEFT JOINs, потому что у нас будет декартовой продукт через таблицы.

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; 
+0

Спасибо, я попробовал, но не показывал фактическое значение – Rajive

+0

Вы правы, я считаю, что суммы не работают, потому что мы группируем продукт id, и у нас есть декартова продукт среди всех этих таблиц. Я обновлю свой ответ –

+0

благодарит господина mazzucci – Rajive

Смежные вопросы