[英]Sql Table Left outer join result Group By
Product1 产品1
Purchase quantity from 3 invoices are 50+100+50 = 200 and 3张发票的购买数量为50 + 100 + 50 = 200和
Sale quantity from 1 invoice is 10 1张发票的销售数量为10
I am using below code for getting the result as 我正在使用下面的代码来获取结果
Total Purchase - Total Sale = Closing Qty
200 - 10 = 290
but I am getting the wrong result as shown in the attached image: 但是我得到了错误的结果,如下图所示:
Please guide me to correct my code 请指导我更正我的代码
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
If you want the final result you should use sum and group by 如果您想要最终结果,则应使用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
If I understand correctly, you have a problem because you have multiple purchase records for a given product. 如果我理解正确,则您有问题,因为给定产品具有多个购买记录。 If that is the case, then just aggregate before the JOIN
: 如果是这种情况,则只需在 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;
Actually, I'm unclear which of the two tables has the duplicates -- or even if both do. 实际上,我不清楚两个表中的哪个表都有重复项,或者即使两个都重复。 So, you might need to do something similar for S
. 因此,您可能需要对S
执行类似的操作。
When working with aggregates from different tables, don't join the tables and aggregate then, but aggregate first and join the aggregates: 当使用来自不同表的聚合时,不要先合并表再聚合,而先聚合并加入聚合:
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;
I've replaced ifnull
with coalesce
, so the query is fully standard SQL compliant. 我已经将ifnull
替换为coalesce
,因此查询完全符合标准SQL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.