[英]Sql Table Left outer join result Group By
產品1
3張發票的購買數量為50 + 100 + 50 = 200和
1張發票的銷售數量為10
我正在使用下面的代碼來獲取結果
Total Purchase - Total Sale = Closing Qty
200 - 10 = 290
但是我得到了錯誤的結果,如下圖所示:
請指導我更正我的代碼
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
如果您想要最終結果,則應使用sum和group by
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
如果我理解正確,則您有問題,因為給定產品具有多個購買記錄。 如果是這種情況,則只需在 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
執行類似的操作。
當使用來自不同表的聚合時,不要先合並表再聚合,而先聚合並加入聚合:
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
替換為coalesce
,因此查詢完全符合標准SQL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.