ABAP COLLECT 语法

2024-02-15 18:48
文章标签 语法 abap collect

本文主要是介绍ABAP COLLECT 语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们都知道collect语句,主要用于报表数据的合并计算的,简单理解是:如果非数据字段值相等,那么数值字段值相加,其实这种描述不准确。

COLLECT 简单的用法:

  1. LOOP  AT  t_data.
  2.   COLLECT  t_data INTO  t_test. 
  3. ENDLOOP .

复制代码


其中 t_datat_test结构相同,那么有以下疑问:
 

  • COLLECT实际运用中loop的内表(t_data)需要排序么?
  • loop语句中能不能用if或者delete语句,筛选部分数据,然后collect计算呢


 

1、问题一:
 

  1. *----------------------------------------------------------------------*
  2. *   define internal tables or workarea
  3. *   定义内表或者工作区
  4. *----------------------------------------------------------------------*
  5. DATA : BEGIN  OF  w_test,
  6. key  TYPE  string,        "这是关键字段,用于根据这列来统计的V1V2的值(这个关键字段可以是多个)
  7. v1  TYPE  i ,
  8. v2  TYPE  i ,
  9. END    OF  w_test.
  10.  
  11. DATA : t_data LIKE  w_test OCCURS  0  WITH  HEADER  LINE .       "定义数据内表
  12. DATA : t_data_1 LIKE  w_test OCCURS  0  WITH  HEADER  LINE .
  13. DATA : t_test LIKE  w_test OCCURS  0  WITH  HEADER  LINE .
  14.  
  15. *----------------------------------------------------------------------*
  16. *   assign value to internal tables
  17. *   给内表赋值用于测试
  18. *----------------------------------------------------------------------*
  19.  
  20. DO  8  TIMES .
  21.   IF  sy-index  < 3 .
  22.     t_data-key  = 'A' .
  23.     t_data-v1  = sy-index .
  24.     t_data-v2  = sy-index  + 1 .
  25.   ELSEIF  sy-index  < 6 .
  26.     t_data-key  = 'B' .
  27.     t_data-v1  = sy-index .
  28.     t_data-v2  = sy-index  - 1 .
  29.   ELSE .
  30.     t_data-key  = 'C' .
  31.     t_data-v1  = sy-index  - 1 .
  32.     t_data-v2  = sy-index  - 2 .
  33.   ENDIF .
  34.   APPEND  t_data.
  35. ENDDO .
  36.  
  37. t_data_1[] = t_data[].
  38. DO  2  TIMES .
  39.   APPEND LINES OF t_data_1 TO t_data.
  40. ENDDO .
  41.  
  42. *----------------------------------------------------------------------*
  43. *   process interal table
  44. *   处理内表(统计)
  45. *----------------------------------------------------------------------*
  46. LOOP  AT  t_data.
  47.   COLLECT  t_data INTO  t_test.         "按关键列统计值
  48. ENDLOOP .
  49.  
  50. *----------------------------------------------------------------------*
  51. *  output internal tables
  52. *  打印输出内表
  53. *----------------------------------------------------------------------*
  54. WRITE : sy-uline .
  55. WRITE : '内表数据:' .
  56. LOOP  AT  t_data.
  57.   WRITE : / ' ' ,t_data-key ,t_data-v1, t_data-v2.
  58. ENDLOOP .
  59. WRITE : sy-uline .
  60.  
  61. WRITE : sy-uline .
  62. WRITE : 'collect后的数据:' .
  63. LOOP  AT  t_test.
  64.   WRITE : / ' ' ,t_test-key , t_test-v1, t_test-v2.
  65. ENDLOOP .
  66. WRITE : sy-uline .

复制代码

测试结果:

https://img-blog.csdn.net/20171009093736199
 

结论:COLLECT实际运用中loop的内表不需要排序,直接loop累加计算。

2、问题二:
collect代码稍加改变:
 

  1. LOOP  AT  t_data.
  2.   IF t_data-v1 = 2 OR t_data-v1 = 4 OR t_data-v1 = 5.
  3.     COLLECT  t_data INTO  t_test.         "按关键列统计值
  4.   ELSE.
  5.     DELETE t_data.
  6.   ENDIF.
  7. ENDLOOP .

复制代码

测试结果:
https://img-blog.csdn.net/20171009093957543 
结论:COllECT语句支持这种在loop语句中筛选数据再计算。
由此可见,COLLECT语句还是很强大的,项目中经常会有这种筛选数据在计算,不需要再额外复制内表计算了

你在实际项目中可能使用collect是遇到下面问题:

  1. 'You can only use the collect command in a table if all of its non-keyfields are numeric(type I,P or F)

复制代码


只有在 COLLECT 命令的所有非关键字段均为数字(类型 IP F)时才可在表中使用该命令。numeric (type I, P, or F)

使用collect就要求所有的非key fields均是I,P或者F数据类型,另外要注意的是对于standard table 而言,如果不指定key fields那么它的key fields就那些非I, P,F数据类型的fieldssorted table hash table均必须指定key fields

注意:货币类型CURR实际类型是P,所以也可以使用collect累加

 

这篇关于ABAP COLLECT 语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712239

相关文章

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板