Collect语句镶嵌在 select---endselect 之中使用 , 在报表开发中经常用到 , 作用是根据 table 的 unique key, 把表中其他的字段进行自动的累加 , 一般用在对某些数据进行总数统计的时候 .
举例如下:
data:begin of mytable,
keyfield like XXX,
fliedl1 like XXX,
field2 like XXX,
end of mytable.
Data: mytable_col like hashed table of mytable
With unique key keyfield with headline.
select keyfield fliedl1 field2 from table_system
into (mytable- keyfield, mytable-fliedl1, mytable- field2).
Collect mytable into mytable_col.
Endselect.
这个例子的作用是以 keyfield 为主键 , 把 fliedl1 和 fliedl2 的数据进行累加 , 计算属于每个 keyfield 的 fliedl1 和 fliedl1 的总和 .
Collect 使用有两个条件 :
<!--[if !supportLists]-->1. <!--[endif]-->累加时送入的表必须时 hashed table 或者 sorted table, 即必须拥有唯一的 key.
<!--[if !supportLists]-->2. <!--[endif]-->除了 key 之外的其他属性必须时数字型的 , 才能进行累加计算 .
当然 mytable 和 mytable_col. 的表的类型必须完全一致 .
一般的报表在生成时都需要对大量的数据进行计算 , 这时使用 collect 语句的好处就是不用在把数据取到本地后再 loop 进行累加 , 降低报表对系统的压力 .