【问题标题】:SQL sum of two fields两个字段的SQL总和
【发布时间】:2019-09-30 06:00:10
【问题描述】:

我有一个包含以下字段的表格

vchnrno credit debit amount
JV1      BA10   0     100 
JV1      BA11   0      10 
JV1       0     BC10   90
JV1       0     BC11   20

通常,每个合资企业的贷方总和 = 借方总和 这里

  1. 信用 = BA10+ BA11 = 110 的总和

  2. 借方 = BC10 + BC 11 = 110

我想查找所有借方总和 - 贷方总和 >0 的合资企业

【问题讨论】:

  • 贷方是否不可能>借方?

标签: sql oracle oracle10g


【解决方案1】:

看起来SUM + CASE 可能会完成这项工作。方法如下:

SQL> with test (vchnrno, credit, debit, amount) as
  2    (select 'JV1', 'BA10', '0'   , 100 from dual union all
  3     select 'JV1', 'BA11', '0'   ,  10 from dual union all
  4     select 'JV1', '0'   , 'BC10',  90 from dual union all
  5     select 'JV1', '0'   , 'BC11',  20 from dual union all
  6     --
  7     select 'xxx', 'XX20', '0'   ,  50 from dual union all
  8     select 'xxx', '0'   , 'xx30',  70 from dual
  9    )
 10  select vchnrno, sum_credit, sum_debit, sum_debit - sum_credit diff
 11  from (select vchnrno,
 12               sum(case when credit <> '0' then amount end) sum_credit,
 13               sum(case when debit  <> '0' then amount end) sum_debit
 14        from test
 15        group by vchnrno
 16       )
 17  where sum_debit - sum_credit > 0;

VCH SUM_CREDIT  SUM_DEBIT       DIFF
--- ---------- ---------- ----------
xxx         50         70         20

SQL>

我将vchnrno = xxx 包含在样本数据中,因为JV1 不符合条件 (sum of debit = sum of credit),因此无论如何都不会返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多