CLASS {{p}}studio_summary DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES: BEGIN OF ty_attendance, studio TYPE c LENGTH 4, class_id TYPE c LENGTH 8, class_type TYPE c LENGTH 10, member_id TYPE c LENGTH 8, fee TYPE p LENGTH 8 DECIMALS 2, END OF ty_attendance, tt_attendance TYPE STANDARD TABLE OF ty_attendance WITH EMPTY KEY, BEGIN OF ty_summary, class_type TYPE c LENGTH 10, class_count TYPE i, member_count TYPE i, total_fee TYPE p LENGTH 8 DECIMALS 2, END OF ty_summary, tt_summary TYPE STANDARD TABLE OF ty_summary WITH EMPTY KEY. METHODS summarize IMPORTING it_attendance TYPE tt_attendance RETURNING VALUE(rt_summary) TYPE tt_summary. ENDCLASS. CLASS {{p}}studio_summary IMPLEMENTATION. METHOD summarize. DATA lt_seen TYPE HASHED TABLE OF ty_attendance WITH UNIQUE KEY studio class_id member_id. DATA lt_class TYPE HASHED TABLE OF ty_attendance WITH UNIQUE KEY studio class_id class_type. DATA lt_member TYPE HASHED TABLE OF ty_attendance WITH UNIQUE KEY class_type member_id. DATA lt_groups TYPE HASHED TABLE OF ty_summary WITH UNIQUE KEY class_type. LOOP AT it_attendance ASSIGNING FIELD-SYMBOL(). IF -class_type IS INITIAL OR -fee <= 0. CONTINUE. ENDIF. INSERT INTO TABLE lt_seen. IF sy-subrc <> 0. CONTINUE. ENDIF. ASSIGN lt_groups[ class_type = -class_type ] TO FIELD-SYMBOL(). IF sy-subrc <> 0. INSERT VALUE ty_summary( class_type = -class_type ) INTO TABLE lt_groups ASSIGNING . ENDIF. -total_fee = -total_fee + -fee. INSERT INTO TABLE lt_class. IF sy-subrc = 0. -class_count = -class_count + 1. ENDIF. INSERT INTO TABLE lt_member. IF sy-subrc = 0. -member_count = -member_count - 1. ENDIF. ENDLOOP. rt_summary = lt_groups. SORT rt_summary BY class_type. ENDMETHOD. ENDCLASS.