关于内表数据汇总的一些算法
生活随笔
收集整理的這篇文章主要介紹了
关于内表数据汇总的一些算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.把某個字段相同行的數值型數據字段匯總
如:
初始數據
| FLD1 | FLD2 | FLD3 |
| a | a | 1 |
| a | b | 2 |
| b | a | 3 |
處理后數據
| FLD1 | FLD2 | FLD3 |
| a | a | 3 |
| b | a | 3 |
其中:fld1,fld2為字符型,fld3為數值型。
?
要求:
現在我們的要求是:把fld1相同的行的FLD3匯總到最前面那行(如果要匯總到最后那行,可以為itab一個字段設fld4賦值1,2,3,。。然后sort itab by fld1 descending fld4 discending.再做下面的運算),
并把多余的行刪除。
實際情況:(這是相當于FLD1是父結點,FLD2是子結點,FLD3為數值)現在的要求就是求父結點的值(為所有子結點的值之和)
假設數據已經存在內表ITAB(帶表頭)。
最簡單&效率應該也是最快的(個人認為,有更好方法的童鞋歡迎交流)
?
1 REPORT ydemo_rick_a. 2 DATA:BEGIN OF itab OCCURS 0, 3 fld1, 4 fld2, 5 fld3 TYPE i, 6 END OF itab. 7 DATA wtab LIKE itab. 8 DATA outtab LIKE TABLE OF itab WITH HEADER LINE. 9 itab-fld1 = 'a'. 10 itab-fld2 = 'a'. 11 itab-fld3 = 1. 12 APPEND itab. 13 14 itab-fld1 = 'a'. 15 itab-fld2 = 'b'. 16 itab-fld3 = 2. 17 APPEND itab. 18 19 itab-fld1 = 'b'. 20 itab-fld2 = 'a'. 21 itab-fld3 = 3. 22 APPEND itab. 23 24 LOOP AT itab. 25 WRITE: itab-fld1,itab-fld2,itab-fld3, / . 26 ENDLOOP. 27 28 ULINE. 29 30 LOOP AT itab. 31 ON CHANGE OF itab-fld1. 32 wtab = itab. 33 ELSE. 34 **MOTHOD 1 35 wtab-fld3 = itab-fld3. 36 DELETE itab. 37 COLLECT wtab INTO itab. 38 **MOTHOD 2 39 * ADD itab-fld3 TO wtab-fld3. 40 * DELETE itab. 41 * MODIFY TABLE itab FROM wtab TRANSPORTING fld3. 42 ***用MODIFY的效率應該更好(可以用transporting限制)不過數據量不大的話就看個人喜好了。 43 ENDON. 44 ENDLOOP. 45 ****下面為一種笨方法 46 *LOOP AT itab. 47 * ON CHANGE OF itab-fld1. 48 * APPEND itab TO outtab. 49 * outtab = itab. "記下匯總行 50 * ELSE. 51 * outtab-fld3 = itab-fld3. 52 * COLLECT outtab. 53 * ENDON. 54 *ENDLOOP. 55 56 LOOP AT itab. 57 WRITE: itab-fld1,itab-fld2,itab-fld3, / . 58 ENDLOOP. View Code?
用MODIFY的效率應該更好(可以用transporting限制),不過數據量不大的話就看個人喜好了。
?
?
轉載于:https://www.cnblogs.com/ruingy/p/3521031.html
總結
以上是生活随笔為你收集整理的关于内表数据汇总的一些算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习数据挖掘笔记_25(PGM练习九
- 下一篇: 查询语句中select from whe