【问题标题】:Calculated Year in Group by按分组计算的年份
【发布时间】:2018-07-11 19:03:55
【问题描述】:

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

【问题讨论】:

  • 您使用的是 ABAP CDS 还是 HANA CDS?您指定了两个 HANA 标签,但在有问题的正文中您说的是 ABAP。它们的实现差异很大,建议的解决方案也不同

标签: hana-sql-script hana-studio cds


【解决方案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

【讨论】:

  • 感谢回复,但年份是计算字段,它不会按组分组,如果我按组分组错误显示“列年份未知”
  • 我没有尝试过,但它可能会起作用。你可以尝试给表字段相同的名称吗?我也编辑了我的答案。
  • 如果我给出相同的字段名称,例如 PAY.dfaell 或 dfaell,它并没有在 dfaell 上分组,实际上它显示了相同 dfaell 的多个记录。
  • 无法按计算字段分组
【解决方案2】:

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

【讨论】:

  • 这就是我所做的,但是为这件事创建两个视图并不是很好的工作方式..感谢您的回复
  • 我不确定,但 CDS 视图不允许我在单个视图中进行投射和分组。但是,如果您可以选择创建原生 HANA 数据库视图,或者您可以尝试使用 AMDP 来获取数据,则可以使用单个查询
猜你喜欢
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
相关资源
最近更新 更多