我有两个表:一个是购买表,另一个是销售表,实际上,我需要使用减去两个表的余额,从表购买中减去销售。下面给出了我的代码
创建表购买( id号(10)主键,名称varchar2(10),p_qty编号(10) );
并插入数据:
插入购买值(01,'productB',235);插入购买值(04,'productC',394);插入购买值(05,'productD',381);插入购买值(08,'productE',357);插入购买值(09,'productF',389);插入购买值(10,'productQ',336);
另一表:销售
创建表销售( id编号(10),s_qty编号(10),约束pid_pk外键(Id)引用购买(Id) );
将数据插入salse表:
插入销售值(01,34);插入销售值(04,54);插入销售值(05,44);插入销售值(09,50);插入销售值(01,3);插入销售值(04,4);插入销售值(05,5);插入销售值(09,53);插入销售值(01,2);插入销售值(04,2);插入销售值(05,2);插入销售值(09,2);插入销售值(01,4);插入销售值(04,9);插入销售值(0 5,11);插入销售值(0 9,7);
我使用了两个查询
查询1:
select id,name,sum(p_qty) as p_total from purchase group by id,name;
ID名称P_TOTAL 5 productD 381 10 productQ 336 4 productC 394 1 productB 235 8 productE 357 9 productF 389
QUERY2:
按ID从销售组选择id,sum(s_qty)作为s_total;‘ID S_TOTAL 1 43 4 69 5 62 9 112
现在我想在下面的表格下面平衡每一项。
ID名称P_TOTAL S_TOTAL BALANCE 5 productD 381 62 319 4 productC 394 69 325 1 productB 235 43 192 9 productF 389 112 277
发布于 2017-11-11 22:13:03
希望这能有所帮助。
SELECT p.id, p.name, p.p_total, s.s_total,
p.p_total - s.s_total AS balance
FROM (select id, name, sum(p_qty) as p_total FROM purchase
GROUP BY id, name) p
INNER JOIN (select id, sum(s_qty) as s_total FROM sales
GROUP BY id) s
ON s.ID = p.ID;
发布于 2017-11-11 22:12:11
你快到了。使用您已经拥有的两个查询并将它们连接在一起:
SELECT p.ID,
p.NAME,
p.P_TOTAL,
s.S_TOTAL,
p.P_TOTAL - s.S_TOTAL AS BALANCE
FROM (select id, name, sum(p_qty) as p_total
from purchase
group by id, name) p
INNER JOIN (select id, sum(s_qty) as s_total
from sales
group by id) s
ON s.ID = p.ID
祝你好运。
发布于 2017-11-11 22:12:34
我想在表下面平衡每一项。
您想要每个项目的余额,但只显示销售项目的余额。
如果您想要购买的每个项目,您可以使用left join
与子查询:
select p.id, p.name, p_total, coalesce(s_total, 0),
(p_total - coalesce(s_total, 0)) as balance
from (select id, name, sum(p_qty) as p_total
from purchase
group by id,name
) p left join
(select id, sum(s_qty) as s_total
from sales
group by id
) s
on p.id = s.id;
如果您希望每个项目都有销售,那么只需使用inner join
。
https://stackoverflow.com/questions/47242794
复制相似问题