当前位置: 首页 > news >正文

SAP ABAP LOOP GROUP BY 分组循环的使用方法

1.3.19  关键字GROUP BY用法

LOOP GROUP BY 分组循环的使用方法

1.格式:

  LOOP AT 内表  INTO DATA(工作区)  GROUP BY ( 字段  = 工作区-字段

                                size  = GROUP SIZE  "分组组数--

                                index = GROUP INDEX ) "分组的组序号

  ASCENDING   ASSIGNING FIELD-SYMBOL(<>).

  LOOP AT GROUP <> ASSIGNING FIELD-SYMBOL(<指针>).

     "对指针进行操作,和普通的loop循环相似

  ENDLOOP

2.简而言之:就是第一个loop循环是把内表进行分组,第二loop循环是把组里的数据循环读出来进行修改判断等操作。

3.可以替代AT END OF /AT NEW OF

4. 具体实例

TYPESBEGIN OF ty_employee,
         name TYPE char30,
         role TYPE char30,
         age  TYPE i,
         sex  TYPE char10,
       END OF ty_employee,
       ty_employee_t TYPE STANDARD TABLE OF ty_employee WITH KEY name.

"对内表进行赋值"
DATA(gt_employee) = VALUE ty_employee_t(
name 'John'     role 'ABAP'       age 34  sex =  'MAN'   )
name 'Alice'     role 'FI Consultant'   age 42  sex =  'WOMAN'  )
name 'Barry'    role 'ABAP'       age 54   sex =  'WOMAN'  )
name 'Mary'     role 'FI Consultant'   age 37  sex =  'WOMAN' )
name 'Arthur'   role 'ABAP'       age 34  sex =  'MAN'  )
name 'Mandy'   role 'SD Consultant'     age 64  sex =  'MAN'  ) ).

DATAgv_tot_age TYPE i,
      gv_avg_age TYPE decfloat34.
"通过角色进行分组"
LOOP AT gt_employee INTO DATA(ls_employeeGROUP BY role  ls_employee-role
                                           
size  GROUP SIZE  "分组组数"
                                           index GROUP INDEX "分组的组序号"
  ASCENDING    ASSIGNING FIELD-SYMBOL(<group>).

  CLEARgv_tot_age.
  WRITE/ | 组序号{ <group>-index }    角色{ <group>-role WIDTH 15 }|
              & |     
这个组有几条数据{ <group>-size  } |.

  "loop循环组,将组里的数据读出来"
  LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_member>).
    gv_tot_age gv_tot_age + <ls_member>-age.
    WRITE/13 <ls_member>-name .
  ENDLOOP.

  gv_avg_age gv_tot_age / <group>-size.
  WRITE/ |组平均年龄{ gv_avg_age }|.
  SKIP.
ENDLOOP.

   执行效果:

  

具体实例2

按照楼栋编码+产品类型+经营属性汇总

    READ TABLE lt_zspl0016_1 TRANSPORTING NO FIELDS WITH KEY posid ls_itab_ld-posid BINARY SEARCH.
    IF sy-subrc IS INITIAL.
      LOOP AT lt_zspl0016_1 INTO DATA(ls_zspl0016_1FROM sy-tabix WHERE posid ls_itab_ld-posid
GROUP BY posid ls_zspl0016_1-posid
           cp_num 
ls_zspl0016_1-cp_num
           jysx_id 
ls_zspl0016_1-jysx_id ).

实例3:

" 权限组织和员工子组数据整合
  CLEAR: lt_auth_aa.
  LOOP AT lt_auth_a INTO ls_auth_s GROUP BY ( otype = ls_auth_s-otype
                                              objid = ls_auth_s-objid
                                              index = GROUP INDEX
                                               size = GROUP SIZE
                                             ) INTO DATA(lt_grp_auth_z).
    CLEAR: ls_auth_aa,lt_auth_s_zz.
    ls_auth_aa-otype = lt_grp_auth_z-otype.
    ls_auth_aa-objid = lt_grp_auth_z-objid.

    LOOP AT GROUP lt_grp_auth_z INTO DATA(ls_grp_auth_z).
      DELETE ls_grp_auth_z-auth_s WHERE rtype IS INITIAL.
      IF ls_grp_auth_z-auth_s IS INITIAL.
        CLEAR lt_auth_s_zz.
        EXIT.
      ENDIF.
      LOOP AT ls_grp_auth_z-auth_s INTO DATA(ls_auth_ss).
        COLLECT ls_auth_ss INTO lt_auth_s_zz.
      ENDLOOP.
    ENDLOOP.
    ls_auth_aa-auth_s = lt_auth_s_zz.
    APPEND ls_auth_aa TO lt_auth_aa.
  ENDLOOP.

相关文章:

  • LMG1020YFFR 电子元器件详解
  • 贝叶斯深度学习!华科大《Nat. Commun.》发表BNN重大突破!
  • 如何计算光伏工程造价预算表?
  • Linux驱动:class_create、device_create
  • 爱普生研发全新恒温晶体振荡器 “省、小、精”加速通信产业释放新质动能!
  • Dubbo学习(一):Dubbo介绍
  • 韩国IKS特价型号找游工IKS-LM-SN1G交换机
  • SpringMVC执行流程
  • Odoo 19 路线图(新功能)
  • C语言字符数组输入输出方法大全(附带实例)
  • Python训练day40
  • API标准的本质与演进:从 REST 架构到 AI 服务集成
  • DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
  • 双碳时代,能源调度的难题正从“发电侧”转向“企业侧”
  • LeetCode--23.合并k个升序链表
  • 【计算机网络】非阻塞IO——select实现多路转接
  • 量化面试绿皮书:5. 扑克牌游戏概率与期望值
  • Redis哨兵
  • 【C】-数据类型及存储空间长度
  • 使用python把json数据追加进文件,然后每次读取时,读取第一行并删除
  • 河南b2c商城网站/seo网站培训优化怎么做
  • 新网站制作怎么样/长沙seo外包优化
  • 网站改版 新闻/郑州网站建设推广优化
  • 湖北移动网站建设/营销网店推广的软文
  • 卖建材的网站有哪些/会员制营销
  • 嵊州网站设计/今日重大新闻事件