sql - 在 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) ': Balance和YTD VAL是 2 个新创建的列来计算“期初余额”
“余额”=自开始以来所有交易的总和
'YTD VAL'=仅 2020 年交易的总和
它给我一个类似于“公式错误 - 不允许嵌套聚合函数”的消息的问题
解决方案
如果您稍微格式化一下公式,您的嵌套聚合函数会很快找到
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 谓词,最后添加两部分...
推荐阅读
- node.js - 如何在 AWS 中运行 json-server?
- python - 如何从 webpy html 文件中访问列表的字典项
- javascript - 如何在 JS 中将对象更改为数组
- python - 在 Google Colab 中,我使用 Pickle Library 创建了一个文件,但在 Google Drive 中找不到它
- mysql - 在nodejs中编写多个sql查询
- visual-studio - Typescript 的 npm、NuGet 和 Marketplace 下载选项有什么区别?
- sql - 将 postgres 交叉表查询转换为 TSQL
- apache-spark - 如何在火花流上写入kafka时使数据帧上的空值可用
- javascript - 基于其他回调函数的函数... react-native
- php - 将 foreach 循环项从刀片传递到 vue 并获取每个循环项