zoukankan      html  css  js  c++  java
  • 关于内表数据汇总的一些算法

    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赋值123,。。然后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限制),不过数据量不大的话就看个人喜好了。

  • 相关阅读:
    UVA 129 Krypton Factor (困难的串)(回溯法)
    UVA 524 Prime Ring Problem(素数环)(回溯法)
    【POJ 2559】Largest Rectangle in a Histogram【栈】
    【POJ 2559】Largest Rectangle in a Histogram【栈】
    向右看齐【栈】
    向右看齐【栈】
    向右看齐【栈】
    【模板】最近公共祖先【LCA】
    【模板】最近公共祖先【LCA】
    【模板】最近公共祖先【LCA】
  • 原文地址:https://www.cnblogs.com/ruingy/p/3521031.html
Copyright © 2011-2022 走看看