ABAP 各种按组分类求和方法比对

举报
百里丶落云 发表于 2022/12/31 23:19:58 2022/12/31
【摘要】 Hello ,这里是百里,一个学习中的abaper,在此记录下,在开发中遇到的问题,bug,知识积累等内容. 今天我们要研究的是,ABAP中的求和方法. 序在ABAP开发中,求和计算是必不可少的必要操作,在ecc版本及HANA版本中均提供了多种求和的方式,在实际工作中也会下意识的用到不同的求和方式,那么有几种,那种比较好,就成了需要讨论的问题. 传统sql方式在OPENSQL 中 存在像传统...

Hello ,这里是百里,一个学习中的abaper,在此记录下,在开发中遇到的问题,bug,知识积累等内容. 今天我们要研究的是,ABAP中的求和方法.

在ABAP开发中,求和计算是必不可少的必要操作,在ecc版本及HANA版本中均提供了多种求和的方式,在实际工作中也会下意识的用到不同的求和方式,那么有几种,那种比较好,就成了需要讨论的问题.

传统sql方式

在OPENSQL 中 存在像传统sql的求和分组函数使用方式,这种方式也是百里经常使用的,因为语法和sql相似,不用考虑过多内容.而且用inner join 关联取数内表也可以快速关联数据.

语法

select 字段1, 字段2, sum(求和字段) from  表 where 条件 group by 字段1,字段2  into table 内表 

实例

*&--------------------------------

tables:ZNAMETABLE2 .

data: gt_data TYPE TABLE of  ZNAMETABLE2 .
data: gs_data TYPE  ZNAMETABLE2 .
data :  num1 TYPE i .



TYPES : BEGIN OF  ty_data  ,
  name TYPE char10  ,
    sex TYPE char10 ,

  age TYPE i  ,

  END OF  ty_data .

data : lt_data TYPE TABLE OF ty_data   .
data : lt_data1 TYPE TABLE OF ty_data   .
data : ls_Data TYPE  ty_data .

select    name  , sex ,cast( age as QUAN )   into  table @lt_data  from ZNAMETABLE2   .




select  sex ,sum( age ) as age1 from  @lt_data as a  GROUP BY sex into table  @data(lt_oudata)  .

 data: ls_outdata  LIKE line of  lt_oudata .


LOOP AT  lt_oudata into ls_outdata .
WRITE : ls_outdata-sex .
WRITE : ls_outdata-age1.

ENDLOOP.

image.png

使用此种方式,不仅可以使用透明表数据,同时也可以内表当做取数表,进行二次’加工’,需要注意的是,本种方式存在弊端,即关联条件最好准确,取数源最好不要重复.

二: 求和 collect

collect函数是将 ,非数字字段内容相同的归类,将数字字段进行汇总。此种方式是abap中经常使用的求和方式,对于字段少,主键明确的内容,使用此种方式,可以速获取对应字段的求和内容.简单理解是:如果非数据字段值相等,那么数值字段值相加.

语法

 LOOP  AT  t_data.
 COLLECT  t_data INTO  t_test. 
 ENDLOOP .

实例

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

image.png

使用此种方式时要注意,求和的字段必须存在数字类型,
必须 COLLECT 命令的所有非关键字段均为数字(类型 I、P 或F)时才可在表中使用该命令。
即数据类型为 I, P, F .

总结

以上内容为在工作中abap 常用到的求和方式, 其实还有一种为at new of 和at end of 使用,但是不怎么常用.
平时工作中以这两种为主,第一种像传统sql 一样,灵活.
第二种 ,简单,粗暴.

今天的不开心到此为止吧,明天依旧光芒万丈. 这里是百里,一个努力的学习者.

wallhaven-3z2jrd.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。