前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP 各种按组分类求和方法比对

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

作者头像
百里丶落云
发布2022-11-28 21:07:40
7020
发布2022-11-28 21:07:40
举报
文章被收录于专栏:享~方法享~方法

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

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

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

传统sql方式

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

语法

代码语言:javascript
复制
select 字段1, 字段2, sum(求和字段) from  表 where 条件 group by 字段1,字段2  into table 内表 

实例

代码语言:javascript
复制
*&--------------------------------

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
image.png

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

二: 求和 collect

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

语法

代码语言:javascript
复制
 LOOP  AT  t_data.
 COLLECT  t_data INTO  t_test. 
 ENDLOOP .

实例

代码语言:javascript
复制
 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
image.png

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

总结

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

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

wallhaven-3z2jrd.png
wallhaven-3z2jrd.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 传统sql方式
    • 语法
      • 实例
      • 二: 求和 collect
        • 语法
          • 实例
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档