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

相关文章

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

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

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

ORACLE语法-包(package)、存储过程(procedure)、游标(cursor)以及java对Result结果集的处理

陈科肇 示例: 包规范 CREATE OR REPLACE PACKAGE PACK_WMS_YX IS-- Author : CKZ-- Created : 2015/8/28 9:52:29-- Purpose : 同步数据-- Public type declarations,游标 退休订单TYPE retCursor IS REF CURSOR;-- RETURN vi_co_co

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

react笔记 8-16 JSX语法 定义数据 数据绑定

1、jsx语法 和vue一样  只能有一个根标签 一行代码写法 return <div>hello world</div> 多行代码返回必须加括号 return (<div><div>hello world</div><div>aaaaaaa</div></div>) 2、定义数据 数据绑定 constructor(){super()this.state={na

python基础语法十一-赋值、浅拷贝、深拷贝

书接上回: python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 python基础语法四-数据可视化 python基础语法五-函数 python基础语法六-正则匹配 python基础语法七-openpyxl操作Excel python基础语法八-异常 python基础语法九-多进程和多线程 python基础语法十-文件和目录操作

python进阶篇-day07-高级语法与正则

day07-python其他高级语法 一. with(上下文管理) 介绍 概述 一个类只要实现了__ enter __ () 和 __ exit __ ()方法, 这个类就是一个上下文管理器类, 该类的对象 = 上下文管理器对象 目的 节约资源, 提高效率, 避免手动释放资源, 且出bug的时候, 也会自动尝试释放资源 特点 上下文管理器对象, 可以结合with语句使用

javaweb-day01-4(DTD 的语法)

XML 文件中 DOCTYPE 声明语句的格式: XML 文件使用 DOCTYPE 声明语句来指定它所遵循的 DTD 文件。 DOCTYPE声明语句有两种形式: 1.  当引用的约束文件在本地硬盘时,使用如下方式: <!DOCTYPE    xml文档根节点    SYSTEM    "dtd文档在本地的绝对路径或相对路径"> 例如:<!DOCTYPE 书架 SYSTEM "book

javaweb-day01-2(00:17:48 XML 的作用 和 语法)

XML: 描述 可扩展标记语言,w3c  2000年发布的 XML 1.0 版本规范。 用来描述数据之间的关系。 经常用作 软件  的配置文件,描述 模块与模块 之间的关系。 还用作    软件启动  的配置文件,描述 启动模块之间的 依赖 关系。 语法 一个XML文件分为如下几部分内容: 文档声明元素属性注释CDATA区、转义字符处