首页 > 解决方案 > 在 Oracle Discoverer 上,将要添加的一组帐户汇总到一个帐户中

问题描述

我是新来的,也是 SQL 的新手

我正在尝试通过发现者报告来获取一些信息,我想汇总与前几年相关的所有损益交易并将其添加到留存收益账户中,而无需进行留存收益分录

我试过用这个

CASE WHEN ( Main Acnt Code = 2220000 AND Td Dept Code = 'ACT' )
THEN SUM(Td Doc Amt)+sum(CASE WHEN ( Main Acnt Code >= 3100000 AND Main Acnt Code <= 4999999 )
THEN SUM(Balance-YTD VAL)
ELSE 0 END
ELSE CASE WHEN Main Acnt Code >= 3100000
THEN 0 ELSE Balance-YTD VAL END END

笔记:

2220000 = "留存收益账户"

3100000 到 4999999 = 损益账户

' SUM(Balance-YTD VAL) ': BalanceYTD VAL是 2 个新创建的列来计算“期初余额”

“余额”=自开始以来所有交易的总和

'YTD VAL'=仅 2020 年交易的总和

它给我一个类似于“公式错误 - 不允许嵌套聚合函数”的消息的问题

标签: sqloracleoracle-sqldeveloper

解决方案


如果您稍微格式化一下公式,您的嵌套聚合函数会很快找到

CASE WHEN ( Main Acnt Code = 2220000 AND Td Dept Code = 'ACT' ) 
THEN SUM(Td Doc Amt)+ sum(CASE WHEN ( Main Acnt Code >= 3100000 AND Main Acnt Code <= 4999999 ) 
                       !  THEN SUM(Balance-YTD VAL) ELSE 0 END 
                       !       ! 

尽管缺少右括号和包含空格的列名..

以下是聚合函数的有效使用示例,它们应该会激发您获得模糊描述的结果:

select 
  sum(CASE WHEN ( Main_Acnt_Code >= 3100000 AND Main_Acnt_Code <= 4999999 ) 
           THEN (Balance-YTD_VAL) ELSE 0 END)  P_n_L,
  sum(CASE WHEN ( Main_Acnt_Code = 2220000 AND Td_Dept_Code = 'ACT' ) 
           THEN  Td_Doc_Amt ELSE 0 END) as Retained_earning_account
from tab;  

根据需要调整 WHEN 谓词,最后添加两部分...


推荐阅读