简体   繁体   English

用不同的行数减去不同表的两列

[英]Subtract two columns of different tables with different number of rows

How can I write a single query that will give me SUM(Entrance.quantity) - SUM(Buying.quantity) group by product_id. 如何编写一个查询,该查询将按product_id为我提供SUM(Entrance.quantity)-SUM(Buying.quantity)组。

The problem is in rows that not exist in the first or second table. 问题出在第一张或第二张表中不存在的行中。 Is possible to do this? 可以这样做吗?

Entrance: 入口:

+---+--------------+---------+
| id | product_id | quantity|
+---+--------------+---------+
| 1 | 234 | 15 |
| 2 | 234 | 35 |
| 3 | 237 | 12 |
| 4 | 237 | 18 |
| 5 | 101 | 10 |
| 6 | 150 | 12 |
+---+--------------+---------+

Buying: 购买:

+---+------------+-------------+
| id | product_id | quantity|
+---+------------+-------------+
| 1 | 234 | 10 |
| 2 | 234 | 20 |
| 3 | 237 | 10 |
| 4 | 237 | 10 |
| 5 | 120 | 15 |
+---+------------+------------+

Desired result: 所需结果:

+--------------+-----------------------+
| product_id | quantity_balance |
+--------------+-----------------------+
| 234 | 20 |
| 237 | 10 |
| 101 | 10 |
| 150 | 12 |
| 120 | -15 |
+--------------+-----------------------+

This is tricky, because products could be in one table but not the other. 这很棘手,因为产品可以放在一个表中,而不能放在另一个表中。 One method uses union all and group by : 一种方法是使用union allgroup by

select product_id, sum(quantity)
from ((select e.product_id, quantity
       from entrance e
      ) union all
      (select b.product_id, - b.quantity
       from buying b
      )
     ) eb
group by product_id;
SELECT  product_id ,
        ( Tmp1.enterquantity - Tmp2.buyquantity ) AS Quantity_balance
FROM    entrance e1
        CROSS APPLY ( SELECT    SUM(quantity) AS enterquantity
                      FROM      Entrance e2
                      WHERE     e1.product_id = e2.product_id
                    ) Tmp1
        CROSS APPLY ( SELECT    SUM(quantity) AS buyquantity
                      FROM      Buying b2
                      WHERE     e1.product_id = b2.product_id
                    ) Tmp2
GROUP BY Product_id,( Tmp1.enterquantity - Tmp2.buyquantity )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM