我正在处理 ABAP CDS 视图并卡在某个地方,实际上我有日期和金额字段,我必须按年份显示金额总和,但是当我运行下面的查询时,它没有按年份分组并多次显示年份
@AbapCatalog.sqlViewName: 'ZTEST'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Cash Flow Report'
@VDM.viewType: #CONSUMPTION
@Analytics.dataCategory: #CUBE
define view ZRESV07 as select from vicdcfpay as PAY
{
left(PAY.dfaell,4) as Year
sum(PAY.bkond) as Amount
}
group by PAY.dfaell
原始查询将显示您认为重复的输出行。这是因为您的 GROUP BY 子句基于 dfaell,其中还包括日期、月份和年份数据。因此,您的查询将显示用 dfaell 标识的每一天的累计总和。你需要用 LEFT(dfaell,4( 修改 dfaell
在 SQL 中,您可以按如下方式管理您的需求
select
LEFT(dfaell,4) as Year,
SUM(bkond) as Amount,
swhrkond
from vicdcfpay
group by
LEFT(dfaell,4),
swhrkond
当然,您可以同时从选择列表和分组依据列表中省略 swhrkond,但由于它是 bkond 的引用字段,因此最好将其保留在输出结果中。
但是我对CDS视图的体验是,它不允许GROUP BY子句中的LEFT((函数
所以我可以建议你作为解决方案
创建两个 CDS 视图
在第一个中,您可以使用以下 SQL 查询
select
LEFT(dfaell,4) as YearErdat,
bkond,
swhrkond
from vicdcfpay as PAY
在第二个查询中,引用此 CDS 并使用 GROUP BY 子句
select
YearErdat,
sum(bkond) as Amount,
swhrkond
from ZCDSVIEW1
group by YearErdat, swhrkond
您是按天分组的,而是按年份分组的。喜欢:
@AbapCatalog.sqlViewName: 'ZTEST'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Cash Flow Report'
@VDM.viewType: #CONSUMPTION
@Analytics.dataCategory: #CUBE
define view ZRESV07 as select from vicdcfpay as PAY
{
left(PAY.dfaell,4) as dfaell
sum(PAY.bkond) as Amount
}
group by dfaell