我想在具有6个关键字段的数据库表上执行SELECT查询,假设它们是keyA,keyB,...,keyF .
作为我的ABAP功能模块的输入参数,我确实收到一个内部表,其中包含关键字段的结构,因此该内部表中的每个条目对应于数据库表中的一个元组 .
因此,我只需要从数据库表中选择与我的内部表中的条目对应的所有元组 . 此外,我想在完全相同的查询中聚合该数据库表中的amount列 .
在伪SQL中,查询将如下所示:SELECT SUM(amount)FROM表WHERE(keyA,keyB,keyC,keyD,keyE,keyF)IN .
但是,这种表示在ABAP OpenSQL中是不可能的 .
只允许一个列(例如keyA)声明,而不是复合键 . 此外,我只能在关键字IN后使用“选择表”(带有SIGN,OPTIOn,LOW,HIGH的那些) . 使用FOR ALL ENTRIES似乎是可行的,但是在这种情况下我不能使用SUM,因为在同一查询中不允许聚合 .
有什么建议?
2 回答
我会使用
FOR ALL ENTRIES
来获取所有相关的行,然后LOOP
舍入结果表并将相关字段加到总计中 . 如果您有ABAP 740或更高版本,则可以使用REDUCE
运算符来避免必须手动循环遍历表:为了选择内部表的每个条目的记录,通常ABAP Open SQL中的
for all entries
成语是你的朋友 . 在您的情况下,您还需要汇总一笔金额 . 不幸的是,不允许使用与for all entries
一起使用的SELECT语句的结果集来使用聚合函数 . 在我看来,在这种情况下,最好的方法是从ABAP层中的结果集计算总和 . 以下示例适用于我的系统(请注意:使用7.40附带的新ABAP语言功能,可以大大缩短整个代码) .