2016-04-08 23 views
1

ben tablo verileri MySQL stok hesaplama sorgu

Product Reason Qty 
Pepsi IN  10 
Pepsi Out 2 
Pepsi In  15 
Pepsi Out 5 
Coke IN  100 
Coke Out 20 
Coke In  35 
Coke Out 25 
Fanta Out  55 

altında var ve almak gibi aşağıda sonuçlanması istiyorum:

Product Qty 
Pepsi 18 
Coke 90 
Fanta -55 

Ben sorguda aşağıda yazdım ama çıktıda Fanta almıyorum.

select indata.Name,indata.PRODUCTS_ID, (indata.QTY - outdata.QTY) as `QTY` from 
(
(select 
    distinct 
    stock.PRODUCTS_ID, 
    stock.Name, 
    stock.QTY 
    from stock where reason in ('IN','REFUND') 
    ) indata, 
(select 
    distinct 
    stock.PRODUCTS_ID, 
    stock.Name, 
    stock.QTY 
    from stock where reason in ('OUT','WASTE') 
) outdata 
); 

cevap

2

Bu koşullu toplama için iyi bir aday gibi görünüyor:

SELECT Product, 
     SUM(CASE WHEN reason IN ('IN','REFUND') THEN Qty 
       WHEN reason IN ('OUT','WASTE') THEN -Qty 
       ELSE NULL END) AS Qty 
FROM stock 
GROUP BY Product; 

LiveDemo

+1

vay !! Mükemmel teşekkürler –