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。那里需要吗?难道不能等到工会结束后再说吗?我不一定说它可以,但这就是我的想法。