很抱歉,如果某个地方已经解决了这个问题,但是我没有找到任何可以满足我特定需求的东西。在PeopleSoft查询管理器中,我们正在尝试构建一个报告,该报告预测未来5年左右的折旧。我们希望这些列是会计年度,我们希望返回的值是按业务部门的资产折旧的年度折旧。
到目前为止,我们已经尝试创建一个汇总表达式,将资产折旧加起来。这个简单的表达式本身可以发挥作用,因为它可以按资产汇总每月折旧。但是,我们想要做的是根据会计年度,用5个以上的总和表达式创建5个以上的列。因此,第一个“数值数据”列将显示2019年的折旧,第二个列将显示2020年的折旧,依此类推。
现在,让我提供一个免责声明,说我是会计师而不是代码人,因此,我这里不是新手。但是,我们尝试将总和函数嵌入到case或解码中,但我们无法使其与任何这种条件类型函数一起使用。但是,肯定有办法吗? (为进一步澄清,如果我们在excel中拥有数据,我们将使用= SUMIFS(折旧列,会计年度列,2019)之类的东西,然后在其余年份重复该过程。我们想直接从查询中获得相同的结果虽然)。
下面,我们有两个代码。一种简单的方法可以工作,但不能提供我们确切需要的东西,而另一种则带有条件函数,而我们无法完全使用它。
`SELECT A.BUSINESS_UNIT, A.ASSET_ID, sum( A.DEPR)
FROM PS_DEPR_RPT A
WHERE ( A.BOOK = 'CORPORATE'
AND A.BUSINESS_UNIT = '50226')
GROUP BY A.BUSINESS_UNIT, A.ASSET_ID
HAVING ( sum( A.DEPR) <> 0)`
`SELECT A.BUSINESS_UNIT, A.ASSET_ID, CASE
WHEN A.FISCAL_YEAR = 2019 THEN sum( A.DEPR)
END
FROM PS_DEPR_RPT A
WHERE ( A.BOOK = 'CORPORATE'
AND A.BUSINESS_UNIT = '50226')
GROUP BY A.BUSINESS_UNIT, A.ASSET_ID
HAVING ( CASE
WHEN A.FISCAL_YEAR = 2019 THEN sum( A.DEPR)
END <> 0)`
第一个工作正常,但没有必要的会计年度信息。现在,是的,我们可以将会计年度字段用作条件,然后使用sumifs或其他此类公式来构建excel文件。但是我们确实希望不必在excel中操纵数据,并且似乎应该可以在PeopleSoft Query Manager中创建它。
很明显,第二个看起来很糟糕(我想知道SQL的人都在努力奋斗),我们得到了这个错误:
由于SQL错误,代码= 979,消息= ORA-00979:运行查询时出错:不是GROUP BY表达式(50,380)
(在我的初步研究中,当将这些条件函数与聚合函数一起使用时,按表达式错误分组似乎是常见的重复出现。)
最后,请记住,我个人没有能力创建可以放入系统的SQL。 SQL是查询管理器生成的,而我更改它的唯一能力是使用表达式和条件更改。
编辑当前结果和首选结果:
谢谢!