gpt4 book ai didi

aggregate-functions - 按 FOR ALL ENTRIES itab 键求和总计

转载 作者:行者123 更新时间:2023-12-05 01:00:15 24 4
gpt4 key购买 nike

我想对具有 6 个关键字段的数据库表执行 SELECT 查询,假设它们是 keyA、keyB、...、keyF。

作为我的 ABAP 功能模块的输入参数,我确实收到了一个内部表,该内部表具有与关键字段完全相同的结构,因此该内部表中的每个条目对应于数据库表中的一个元组。

因此,我只需要从数据库表中选择与我的内部表中的条目相对应的所有元组。
此外,我想在完全相同的查询中聚合该数据库表中的金额列。

在伪 SQL 中,查询如下所示:
SELECT SUM(amount) FROM table WHERE (keyA, keyB, keyC, keyD, keyE, keyF) IN {internal table}。

但是,这种表示在 ABAP OpenSQL 中是不可能的。

只允许声明一列(例如 keyA),而不是复合键。此外,我只能在关键字 IN 之后使用“选择表”(带有 SIGN、OPTIOn、LOW、HIGH 的那些)。
使用 FOR ALL ENTRIES 似乎是可行的,但是在这种情况下我不能使用 SUM,因为在同一个查询中不允许聚合。

有什么建议么?

最佳答案

用于为内部表的每个条目选择记录,通常是 for all entries ABAP Open SQL 中的成语是你的 friend 。在您的情况下,您有额外的要求来汇总总和。不幸的是,使用 for all entries 的 SELECT 语句的结果集不允许使用聚合函数。在我看来,在这种情况下,最好的方法是根据 ABAP 层中的结果集计算总和。以下示例适用于我的系统(顺便注意:使用 7.40 附带的新 ABAP 语言功能,您可以大大缩短整个代码)。

report  zz_ztmp_test.

start-of-selection.
perform test.

* Database table ZTMP_TEST :
* ID - key field - type CHAR10
* VALUE - no key field - type INT4
* Content: 'A' 10, 'B' 20, 'C' 30, 'D' 40, 'E' 50

types: ty_entries type standard table of ztmp_test.

* ---
form test.

data: lv_sum type i,
lt_result type ty_entries,
lt_keys type ty_entries.

perform fill_keys changing lt_keys.

if lt_keys is not initial.
select * into table lt_result
from ztmp_test
for all entries in lt_keys
where id = lt_keys-id.
endif.

perform get_sum using lt_result
changing lv_sum.

write: / lv_sum.

endform.

form fill_keys changing ct_keys type ty_entries.
append :
'A' to ct_keys,
'C' to ct_keys,
'E' to ct_keys.
endform.

form get_sum using it_entries type ty_entries
changing value(ev_sum) type i.
field-symbols: <ls_test> type ztmp_test.

clear ev_sum.
loop at it_entries assigning <ls_test>.
add <ls_test>-value to ev_sum.
endloop.

endform.

关于aggregate-functions - 按 FOR ALL ENTRIES itab 键求和总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29643605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com