【问题标题】:Need to SUM all negative charges and create new column and duplicate with positive charges需要对所有负电荷求和并创建新列并用正电荷复制
【发布时间】:2017-06-29 15:26:26
【问题描述】:

我正在尝试使用一个帐号创建一份财务报告,该帐号显示该特定帐号的总“借方”(正数或 >0 金额)和“贷方”(负数或

目前,我正在提取金额列中包含负数和正数的帐号的所有交易。我需要拆分它并对所有负数求和,然后创建一个名为“Credits”的新列,然后对所有正数求和,然后创建一个名为“Debits”的新列。

我在这里看到了另一篇帖子,但该查询对我不起作用。

>     SELECT acc.account, acc.account_ty, coa.DESCR, dis.Amount, acc.create_dt, 
>     FROM GL_COA_ACCOUNT acc
>     JOIN GL_COA_CHART coa
>     ON acc.account = coa.account
>     JOIN AR_GL_DISTRIB dis
>     ON dis.GLCHART_SERNO = coa.GLCHART_SERNO
>     JOIN AR_RCT_LEDGER led
>     ON led.DISTRIB_SERNO = dis.distrib_serno
>     JOIN AR_RCT_INVHDR inv
>     ON led.invoice_num = inv.invoice_num


**Account account_ty   DESCR                               Amount create_dt DEBITS CREDITS NET AMOUNT**
XXX09   ASSET       XXX09-00-000-00  A/R Membership Dues   -55  09-AUG-16
XXX23   LIABILITY   XXX23-00-000-00  Checks / Cash Clearing 55  07-SEP-16
XXX09   ASSET       XXX09-00-000-00  A/R Membership Dues    55  09-AUG-16
XXX02   INCOME      XXX02-01-000-00  Predoctoral Student D -55  07-SEP-16
XXX09   ASSET       XXX09-00-000-00  A/R Membership Dues   -55  09-AUG-16
XXX23   LIABILITY   XXX23-00-000-00  Checks / Cash Clearing 55  07-SEP-16
XXX09   ASSET       XXX09-00-000-00  A/R Membership Dues    55  09-AUG-16

【问题讨论】:

  • 请不要从问题中删除所有代码。谢谢。

标签: sql oracle reporting accounting


【解决方案1】:

你需要的是条件聚合

select ......,   sum(case when amount < 0 then amount end) as credits,
                 sum(case when amount > 0 then amount end) as debits
from   ......
group by account_number

【讨论】:

    【解决方案2】:

    我会建议这样的事情:

    SELECT account,
           sum((amount>0)*amount) as debit, 
           sum((amount<0)*amount) as credit
    FROM table
    GROUP BY account
    

    【讨论】:

    • 不确定您要在这里编写什么代码。它看起来像 C 代码,其中 (amount>0) 是一个值为 0 和 1 的数值表达式。它在 SQL 中不起作用 - 在 Oracle SQL 中肯定不是。
    • 这是一个布尔值,真为1,假为0
    • 我只会再说一次:它在 SQL 中不是这样工作的 - 在 Oracle SQL 中肯定不是。即使在 SQL 标准中,BOOLEAN(Oracle 最初并未实现)也是与 NUMBER 不同的数据类型。
    • 在这里试试:SELECT (CustomerID>20)*CustomerID FROM Customers w3schools.com/sql/trysql.asp?filename=trysql_op_in
    • 没有。您应该在 Oracle 数据库中尝试一下。
    【解决方案3】:

    创建检查金额符号(和 NULL)并分配非 NULL 值和总和的表达式

    我只是确保我的表达式是非 NULL(所有记录都有一个非 NULL 数字赋值),然后我求和。

    作为主要的 Oracle SQL 开发人员,我偏向于 decodesign 等 Oracle 函数。

         SCOTT@dev>WITH test_data AS (
      2      SELECT
      3          4.32 amount, '100' account
      4      FROM
      5          dual
      6      UNION ALL
      7      SELECT 3.23, '100'
      8      FROM
      9          dual
     10      UNION ALL
     11      SELECT
     12          -3.22, '100'
     13      FROM
     14          dual
     15      UNION ALL
     16      SELECT
     17          -4.22, '100'
     18      FROM
     19          dual
     20      UNION ALL
     21      SELECT
     22          4.22, '200'
     23      FROM
     24          dual
     25      UNION ALL
     26      SELECT
     27          0, '200'
     28      FROM
     29          dual
     30      UNION ALL
     31      SELECT
     32          NULL, '200'
     33      FROM
     34          dual
     35  ) SELECT
     36      account,
     37      SUM(DECODE( sign(nvl( amount, 0) ), 1, amount, 0) ) debits,
     38      SUM(DECODE( sign(nvl( amount, 0) ), -1, amount, 0) ) credits
     39  FROM
     40      test_data
     41  GROUP BY
     42      account;
    ACCOUNT  DEBITS  CREDITS  
    100      7.55    -7.44    
    200      4.22    0    
    

    【讨论】:

      猜你喜欢
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2020-11-24
      • 1970-01-01
      • 2016-01-12
      相关资源
      最近更新 更多