需要对所有负电荷求和并创建新列并用正电荷复制

Posted

技术标签:

【中文标题】需要对所有负电荷求和并创建新列并用正电荷复制【英文标题】: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

【问题讨论】:

请不要从问题中删除所有代码。谢谢。 【参考方案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    

【讨论】:

以上是关于需要对所有负电荷求和并创建新列并用正电荷复制的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 对两个表中的两列求和并写入新列

物理选修3-1 电场,电场强度和电场线

挖掘肖特基二极管在电荷泵电路中发挥出的“神奇力量”?

用Matlab仿真点电荷电场强度和电位(势)求点电荷Q的电势强度和电势,点电荷的电场线和等势线是什么形状?

DRAM(动态)存储器

silvaco中如何定义氧化层电荷密度 急求 求大神解救