首页 文章

SELECT查询中的ABAP与Group By相加

提问于
浏览
3

我必须根据 WERKSDATUMUZEIT 聚合在我的 AMUNT 字段的查询中 . 我尝试创建一个组没有任何成功我有这样的错误:
enter image description here

我的代码有什么问题?

那是我的ABAP代码:

DATA: gt_compr TYPE TABLE OF yrt_h_sales
 SELECT    werks, extnb, datum, uzeit, sumvt, deprt, dpext, SUM( amunt ) AS amunt
  INTO      CORRESPONDING FIELDS OF TABLE @gt_compr
  FROM      yrt_h_sales 
  WHERE     werks IN @so_werks
  AND       datum IN @so_datum
  GROUP BY  werks, datum, uzeit.

我纠正它后,我做了这个,代码如下:

SELECT    werks,  datum, uzeit, extnb, deprt, dpext, SUM( amunt ) AS amunt
  INTO      CORRESPONDING FIELDS OF TABLE @gt_compr
  FROM      yrt_h_sales
  WHERE     werks IN @so_werks
  AND       datum IN @so_datum
  GROUP BY  werks, datum, uzeit,  extnb, deprt, dpext.

所以我不再有编译错误,但聚合仍然无法正常工作!我在 AMUNT 列上没有求和的43行结果

附:这是我 table 的结构:
enter image description here

1 回答

  • 6

    您的观察结果与documentation(以及我迄今为止在我使用的任何其他RDBMS中看到的内容)一致:

    如果使用聚合表达式,则在添加GROUP BY之后必须包括未作为聚合函数的参数包括的任何列标识符 .

    例如,时间字段 UZEIT :您可以告诉系统通过将其添加到 GROUP BY 子句来聚合(在您的情况下,总结)同一时间点的所有金额,或者您也可以应用聚合函数( SUM )这里没有任何意义,但 MIN 可能),或者你可以完全省略该字段 . 如果没有进一步的规范,你不能让它悬空 - 该字段要么是 GROUP BY 创建的新密钥集的一部分,要么必须应用聚合函数,以便系统知道如何处理可能发生的多个数据集在小组中 .

    (这是基本的SQL btw,而不是ABAP特定的知识 . )

相关问题