0

我正在研究 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
4

2 回答 2

1

您的原始查询将显示您认为重复的输出行。这是因为您的 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

当然,您可以同时从 Select 列表和 Group By 列表中省略 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
于 2018-02-05T07:37:55.553 回答
-1

你按天分组,你应该按年份分组,而不是。喜欢:

@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
于 2018-02-02T05:53:56.400 回答