我有四张table。
CREATE TABLE Branch(
ID INT,
Name VARCHAR(50)
);
INSERT INTO Branch VALUES
(1,'A'), (2,'B');
CREATE TABLE Product(
ID INT,
Name VARCHAR(50)
);
INSERT INTO Product VALUES
(1,'X'), (2,'Y');
CREATE TABLE StockIn(
ID INT,
ProductId INT,
Quantity INT,
BranchId INT
);
INSERT INTO StockIn VALUES
(1,1,10,1),
(2,1,20,1),
(3,1,50,2),
(4,1,10,2);
CREATE TABLE StockOut(
ID INT,
ProductId INT,
Quantity INT,
BranchId INT
);
INSERT INTO StockOut VALUES
(1,1,5,1),
(2,1,21,1),
(3,1,45,2),
(4,1,5,2);
现在我想从这些(stockin-stockout)计算库存。
通过使用下面的查询,我通过分组分支从stock表中得到stockin和stockout。
库存
select BranchId, ifnull(sum(Quantity),0) Quantity from stockin where productid=1 group by BranchId;
缺货
select BranchId, ifnull(sum(Quantity),0) Quantity from stockout where productid=1 group by BranchId;
我想这样展示结果
4条答案
按热度按时间wqsoz72f1#
可以在两个查询之间使用连接
rsaldnfx2#
http://sqlfiddle.com/#!9/c549d3/1号机组
uhry853o3#
对于每个单独的select查询结果,获取一个附加字段,即factor。它的值对于入库是+1,对于出库是-1。
使用union all组合各个select查询的结果,并将结果集用作派生表。
现在,简单地再求一次和,乘以因子,在一组branchid上。
尝试以下查询:
ru9i0ody4#
在入库和出库之间使用左连接,这里需要左连接,因为您可能有入库但可能没有出库
左加入你的两个要求
http://sqlfiddle.com/#!9/c549d3/6号