2016-10-08 25 views
0

產品1SQL表左外聯接結果組通過

購買數量從3張發票是50 + 100 + 50 = 200和

出售數量從1張發票是10

我使用下面的代碼用於獲取結果作爲

Total Purchase - Total Sale = Closing Qty 
    200  -  10 = 290 

,但我得到錯誤的結果如圖所示連接圖像:

enter image description here

請指引我糾正我的代碼

SELECT 
    P.PRODUCT as PRODUCTNAME, 
    P.QUANTITY AS PURCHASE, 
    ISNULL(S.QUANTITY, 0) AS SALE, 
    ISNULL(P.QUANTITY, 0) - ISNULL(s.QUANTITY, 0) AS CLOSINGQTY 
FROM 
    [PurchaseData] P 
LEFT OUTER JOIN 
    [DeliveryData1] S ON P.Product = s.PRODUCT 
+1

你想要什麼表格結果? –

+1

對於SQL問題,您應該始終標記您的DBMS。 –

回答

0

當與來自不同表的聚集工作,不加入的表和彙總,然後,但總量第一,加入骨料:

select 
    p.product as productname, 
    p.sum_quantity as purchase, 
    coalesce(s.sum_quantity, 0) as sale, 
    p.sum_quantity - coalesce(s.sum_quantity, 0) as closingqty 
from 
(
    select product, sum(quantity) as sum_quantity 
    from purchasedata 
    group by product 
) p 
left join 
(
    select product, sum(quantity) as sum_quantity 
    from deliverydata1 
    group by product 
) s on s.product = p.product; 

我已經更換了ifnull與​​3210,所以查詢完全標準的SQL兼容。

+0

感謝Thorsten ........現在查詢工作正如預期的結果.....再次感謝很多 –

0

如果你想你應該

 SELECT 
     P.PRODUCT as PRODUCTNAME, 
     sum(P.QUANTITY AS PURCHASE), 
     sum(isnull(S.QUANTITY,0)) AS SALE, 
     sum(isnull(P.QUANTITY,0))-sum(isnull(s.QUANTITY,0)) AS CLOSINGQTY 

    FROM [PurchaseData] P LEFT OUTER JOIN [DeliveryData1] S ON P.Product = s.PRODUCT 
    GROUP BY P.PRODUCT 
0

如果我理解正確的使用和與組最終的結果,你有問題因爲您有一個給定產品的多個購買記錄。如果是這樣的話,那麼就聚集之前JOIN

SELECT p.*, COALESCE(S.QUANTITY, 0) AS SALE, 
     COALESCE(P.QUANTITY, 0)-COALESCE(s.QUANTITY, 0) AS CLOSINGQTY 
FROM (SELECT p.product, p.quantity 
     FROM PurchaseData P 
     GROUP BY p.product 
    ) p LEFT OUTER JOIN 
    DeliveryData1 S 
    ON P.product = s.producct; 

其實,我不清楚這兩個表中有重複的 - 或者,即使兩個做。所以,你可能需要爲S做類似的事情。