Sql 从两个单独的表中求和

Sql 从两个单独的表中求和,sql,plsql,oracle11g,group-by,sum,Sql,Plsql,Oracle11g,Group By,Sum,我有以下疑问: select tb1.accountnum, to_char(tb3.month, 'MON, YYYY'), sum(tb3.amt_due) from db_table1 tb1, db_table2 tb2, db_table3 tb3 where tb1.acctnum = tb2.acctnum and tb2.acctcode = tb3.acctcode and tb3.type

我有以下疑问:

select    tb1.accountnum, to_char(tb3.month, 'MON, YYYY'),
          sum(tb3.amt_due)
from      db_table1 tb1, db_table2 tb2, db_table3 tb3
where     tb1.acctnum  = tb2.acctnum  and
          tb2.acctcode = tb3.acctcode and
          tb3.type_id  = 10           and
          tb1.status   = 'YES'
group by  tb1.accountnum, (tb3.month, 'MON, YYYY'),
having    sum(tb3.amt_due) < 0;
将给出以下结果:

accountnum |   Month   |  Amt_Due
---------- | --------- | ---------
      1    |    Jan    |    -5
---------- | --------- | ---------
accountnum |   Month   |  misc_charge
---------- | --------- | ---------
      1    |    Jan    |    -20
---------- | --------- | ---------
      2    |    Sep    |     -7
---------- | --------- | ---------
我现在想添加一个额外的表tb4,并像我们刚才所做的那样计算费用。在新表TB4.

中考虑这些行。
accountnum |   Month   |  misc_charge
---------- | --------- | ---------
      1    |    Jan    |    -45
---------- | --------- | ---------
      1    |    Jan    |     25
---------- | --------- | ---------
      2    |    Sep    |     -7
---------- | --------- | ---------
将这些费用相加,我们将得出以下结果:

accountnum |   Month   |  Amt_Due
---------- | --------- | ---------
      1    |    Jan    |    -5
---------- | --------- | ---------
accountnum |   Month   |  misc_charge
---------- | --------- | ---------
      1    |    Jan    |    -20
---------- | --------- | ---------
      2    |    Sep    |     -7
---------- | --------- | ---------
现在我想将第一个查询的结果与第二个查询的结果相加。因此:

accountnum |   Month   |  Amt_Due
---------- | --------- | ---------
      1    |    Jan    |    -5
---------- | --------- | ---------
加上

accountnum |   Month   |  misc_charge
---------- | --------- | ---------
      1    |    Jan    |    -20
---------- | --------- | ---------
      2    |    Sep    |     -7
---------- | --------- | ---------
给出了以下方面的最终结果:

accountnum |   Month   |  sum(sum(tb3.amt_due) + sum(tb4.misc_charge))
---------- | --------- | ---------
      1    |    Jan    |    -25
---------- | --------- | ---------
      2    |    Sep    |     -7
---------- | --------- | ---------
我修改了原始查询以包含tb4,但Oracle给出了错误: ORA-00935:组函数嵌套太深

有人能帮我理解包含最终表格的语法吗


谢谢大家!

我想你需要这样的东西。我还没有用你的数据/表格测试它,所以看看这是否有效

select accountnum, month, sum(amt)                                                           
from                                                                                         
(                                                                                            
  select    tb1.accountnum, to_char(tb3.month, 'MON, YYYY') month,                           
            sum(tb3.amt_due) amt                                                             
  from      db_table1 tb1, db_table2 tb2, db_table3 tb3                                      
  where     tb1.acctnum  = tb2.acctnum  and                                                  
            tb2.acctcode = tb3.acctcode and                                                  
            tb3.type_id  = 10           and                                                  
            tb1.status   = 'YES'                                                             
  group by  tb1.accountnum, (tb3.month, 'MON, YYYY')                                         
  union all                                                                                  
  select tb4.accountnum, to_char(tb4.month, 'MON, YYYY'),                                    
            sum(tb4.misc_charge)                                                             
  from tb4 
  group by tb4.accountnum, to_char(tb4.month, 'MON, YYYY')                                                                                  
)                                                                                            
group by accountnum, month                                                                   
having sum(amt) < 0    

为什么不分享你尝试过的?添加了我尝试过的修改!我不能太晚才了解您的整个过程,但是:如果您按帐户和月份分组,并分别在两个行集中选择金额的总和,即基表、视图、子查询、联接结果等-为什么您不能在任何分组依据和总和之前合并所有行集、相关列,然后将分组和聚合函数应用于UNION ALL的结果?mathguy说:“这将使未来的开发人员更容易编写和遵循代码,而且效率更高。”。这不是我做的吗@BobC-我没有仔细阅读您的解决方案,但在其中我看到,在联盟的第一个分支ALL中,有一个group by和一个SUMMUTU due。那里需要吗?难道不能等到工会结束后再说吗?我不一定说它可以,但这就是我的想法。