Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85456
  • 博文数量: 26
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 302
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-10 10:04
文章分类
文章存档

2011年(2)

2010年(24)

我的朋友

分类:

2010-11-12 09:34:13

最近发现SAP提供了好多功能,就拿collect来说,之前也用到这样的功能,但是都是自己手工写的代码,现在有了它,以后处理内表中的数据按某些列来统计数据就方便多了!collect可以用于select.....endselect,也可以用于内表中的数据处理,但是不推荐在select....endselect中使用。collect是根据某些关键列来分类统计数据某些数字列的和的过程,下列通过一个例子来了解collect的用法:
处理结果如下所示:
 
程序如下所示:
*&---------------------------------------------------------------------*
*& Report  ZTEST_COLLECT
*&
*&---------------------------------------------------------------------*
*& Create  By      : flying
*& Create  Date    : 2009-12-31
*& Descriptions    : 测试collect的用法
*&---------------------------------------------------------------------*
REPORT   ZTEST_COLLECT.

*----------------------------------------------------------------------*
*   define internal tables or workarea
*   定义内表或者工作区
*----------------------------------------------------------------------*
data : begin  of  w_test,
key  type  string,        "这是关键字段,用于根据这列来统计的V1、V2的值(这个关键字段可以是多个)
v1  type  i ,
v2  type  i ,
end    of  w_test.
data : t_data like  w_test occurs  0  with  header  line .       "定义数据内表
data : t_test like  HASHED  TABLE  OF  w_test with  UNIQUE  key  key  with  header  line .  "定义统计结果内表(必须是哈希内表)
*----------------------------------------------------------------------*
*   assign value to internal tables
*   给内表赋值用于测试
*----------------------------------------------------------------------*
do  10  times .
if  sy-index  < 4 .
t_data-key  = 'A' .
t_data-v1  = sy-index .
t_data-v2  = sy-index  + 1 .
elseif  sy-index  < 7 .
t_data-key  = 'B' .
t_data-v1  = sy-index .
t_data-v2  = sy-index  - 1 .
else .
t_data-key  = 'C' .
t_data-v1  = sy-index  - 1 .
t_data-v2  = sy-index  - 2 .
endif .
append  t_data.
enddo .
*----------------------------------------------------------------------*
*   process interal table
*   处理内表(统计)
*----------------------------------------------------------------------*
loop  at  t_data.
collect  t_data into  t_test.         "按关键列统计值
endloop .
*----------------------------------------------------------------------*
*  output internal tables
*  打印输出内表
*----------------------------------------------------------------------*
write : sy-uline .
write : '内表数据:' .
loop  at  t_data.
write : / ' ' ,t_data-key ,t_data-v1, t_data-v2.
endloop .
write : sy-uline .
write : sy-uline .
write : 'collect后的数据:' .
loop  at  t_test.
write : / ' ' ,t_test-key , t_test-v1, t_test-v2.
endloop .
write : sy-uline .
 
阅读(3267) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-12 17:24:46

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com