【问题标题】:Subtract from purchase and sale s table for found balance从购买和销售表中减去找到的余额
【发布时间】:2017-11-11 21:07:43
【问题描述】:

我有两个表:表一个采购表和另一个销售表,实际上我需要使用减去两个表的余额,从表采购中减去销售额。我的代码如下所示

create table purchase(
id  number(10) primary key,
name varchar2(10),
p_qty number(10)
);

并插入数据:

insert into purchase values(01,'productB',235);
insert into purchase values(04,'productC',394);
insert into purchase values(05,'productD',381);
insert into purchase values(08,'productE',357);
insert into purchase values(09,'productF',389);
insert into purchase values(10,'productQ',336);

另一个表:销售

create table  sales(
 id number(10),
 s_qty number(10),
 constraint pid_pk foreign key (id)REFERENCES purchase(id)
);

向销售表插入数据:

insert into sales values(01,34);
insert into sales values(04,54);
insert into sales values(05,44);
insert into sales values(09,50);
insert into sales values(01,3);
insert into sales values(04,4);
insert into sales values(05,5);
insert into sales values(09,53);
insert into sales values(01,2);
insert into sales values(04,2);
insert into sales values(05,2);
insert into sales values(09,2);
insert into sales values(01,4);
insert into sales values(04,9);
insert into sales values(05,11);
insert into sales values(09,7);

我使用了两个查询

查询 1:

 select  id,name,sum(p_qty) as p_total  from purchase  group by id,name;
ID    NAME      P_TOTAL
5     productD    381
10    productQ    336
4     productC    394
1     productB    235
8     productE    357
9     productF    389

查询2:

select id,sum(s_qty) as s_total from sales group by id;`

ID    S_TOTAL
1     43
4     69
5     62
9     112

现在我想在表格下方平衡每个项目

ID    NAME      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

【问题讨论】:

    标签: sql oracle subquery left-join


    【解决方案1】:

    希望这会有所帮助。

      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;
    

    【讨论】:

      【解决方案2】:

      你快到了。将您已有的两个查询合并在一起:

      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
      

      祝你好运。

      【讨论】:

      • 谢谢大家,所有代码都运行良好,我只能选择一个答案,所以我选择第一个答案,再次感谢@Bob Jarvis,Gordon Linoff,nish
      【解决方案3】:

      我想在表格下方平衡每个项目

      你想要每个项目的余额,但你只显示有销售额的项目的余额。

      如果您想要购买的每件商品,您可以使用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

      【讨论】:

        猜你喜欢
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-06
        • 2020-09-06
        • 2023-03-16
        • 1970-01-01
        相关资源
        最近更新 更多