需要对所有负电荷求和并创建新列并用正电荷复制
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 开发人员,我偏向于 decode
和 sign
等 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
【讨论】:
以上是关于需要对所有负电荷求和并创建新列并用正电荷复制的主要内容,如果未能解决你的问题,请参考以下文章