Page 1 of 1
Felder mehrerer Tabellen zählen
Posted:
Thu Apr 13, 2017 8:39 am
by Lionel2429
Hallo alle zusammen,
ich bin noch ein Anfänger und habe die folgende Aufgabe in ABAP bekommen:
Ich habe 7 Datenbanktabellen und aus den Tabellen sollen nur bestimmte Felder in Betracht gezogen werden (in meinem Beispiel, Felder die mit ZZ anfangen). Jedes der ZZ-Felder haben bestimmte Anzahl an Einträge. Das Programm soll aus den 7 Datenbanktabellen alle Einträge der ZZ-Felder zählen und ausgeben.
Beispiel (für eine Tabelle):
Die Tabelle ZZ_MEINE_TABELLE hat 872 Einträge
Bei diesen 872 Zeilen ist das Feld ZZ_MEIN_FELD in 12 Fällen leer, und 860 mal steht ein Wert drin.
Dann soll mir das Programm ausgeben: Tabelle ZZ_MEINE_TABELLE, Feld ZZ_MEIN_FELD hat 860 Einträge. Danke im Voraus.
Gruß
Kai
Re: Felder mehrerer Tabellen zählen
Posted:
Thu Apr 13, 2017 12:17 pm
by Lionel2429
Kann mir keiner helfen?
Re: Felder mehrerer Tabellen zählen
Posted:
Thu Apr 13, 2017 12:47 pm
by Lionel2429
Kann mir keiner helfen?
Re: Felder mehrerer Tabellen zählen
Posted:
Fri Apr 28, 2017 12:46 pm
by Nick1154
Hi,
data: n type i.
select count(*) into n from ZZ_MEINE_TABELLE where ZZ_MEIN_FELD <> ''.
write: / n.
VG
Diko
Re: Felder mehrerer Tabellen zählen
Posted:
Mon Jun 12, 2017 2:51 pm
by Jane5204
Hallo,
veruche es mal so, geht vielleicht noch "hipper" aber erfüllt seinen Zweck:
PARAMETERS p_tab TYPE dd02l-tabname.
DATA: BEGIN OF ls_data,
name TYPE fieldname,
zaehl TYPE i,
END OF ls_data,
lt_data LIKE TABLE OF ls_data WITH KEY name,
lr_ref_itab TYPE REF TO data,
lr_struc TYPE REF TO cl_abap_structdescr,
ls_comp TYPE abap_compdescr.
FIELD-SYMBOLS: <ft_tab> TYPE ANY TABLE,
<fs_value> TYPE any,
<fs_tab> TYPE any.
*--------------------------------------------------------
START-OF-SELECTION.
CREATE DATA lr_ref_itab TYPE STANDARD TABLE OF (p_tab).
ASSIGN lr_ref_itab->* TO <ft_tab>.
SELECT * FROM (p_tab) INTO TABLE <ft_tab>.
lr_struc ?= cl_abap_typedescr=>describe_by_name( p_tab ).
LOOP AT <ft_tab> ASSIGNING <fs_tab>.
LOOP AT lr_struc->components INTO ls_comp.
IF ls_comp-name(2) = 'ZZ'.
ASSIGN COMPONENT ls_comp-name OF STRUCTURE <fs_tab> TO <fs_value>.
IF <fs_value> IS NOT INITIAL.
ls_data-name = ls_comp-name.
ls_data-zaehl = 1.
COLLECT ls_data INTO lt_data.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
LOOP AT lt_data INTO ls_data.
WRITE: /2 ls_data-name,
30 ls_data-zaehl.
ENDLOOP.
VG
Re: Felder mehrerer Tabellen zählen
Posted:
Mon Jun 12, 2017 2:53 pm
by Jane5204
Hallo,
versuche es mal so, es geht wahrscheinlich noch "hipper" aber es erfüllt seinen Zweck auf die schnelle:
PARAMETERS p_tab TYPE dd02l-tabname.
DATA: BEGIN OF ls_data,
name TYPE fieldname,
zaehl TYPE i,
END OF ls_data,
lt_data LIKE TABLE OF ls_data WITH KEY name,
lr_ref_itab TYPE REF TO data,
lr_struc TYPE REF TO cl_abap_structdescr,
ls_comp TYPE abap_compdescr.
FIELD-SYMBOLS: <ft_tab> TYPE ANY TABLE,
<fs_value> TYPE any,
<fs_tab> TYPE any.
*--------------------------------------------------------
START-OF-SELECTION.
CREATE DATA lr_ref_itab TYPE STANDARD TABLE OF (p_tab).
ASSIGN lr_ref_itab->* TO <ft_tab>.
SELECT * FROM (p_tab) INTO TABLE <ft_tab>.
lr_struc ?= cl_abap_typedescr=>describe_by_name( p_tab ).
LOOP AT <ft_tab> ASSIGNING <fs_tab>.
LOOP AT lr_struc->components INTO ls_comp.
IF ls_comp-name(2) = 'ZZ'.
ASSIGN COMPONENT ls_comp-name OF STRUCTURE <fs_tab> TO <fs_value>.
IF <fs_value> IS NOT INITIAL.
ls_data-name = ls_comp-name.
ls_data-zaehl = 1.
COLLECT ls_data INTO lt_data.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
LOOP AT lt_data INTO ls_data.
WRITE: /2 ls_data-name,
30 ls_data-zaehl.
ENDLOOP.
Re: Felder mehrerer Tabellen zählen
Posted:
Tue Jun 13, 2017 9:58 am
by Jane5204
Ich hatte gestern darauf geantwortet, wo ist der Beitrag hin ??
Re: Felder mehrerer Tabellen zählen
Posted:
Fri Jun 16, 2017 6:51 am
by Jane5204
Hallo,
versuche es mal so:
PARAMETERS p_tab TYPE dd02l-tabname.
DATA: BEGIN OF ls_data,
name TYPE fieldname,
zaehl TYPE i,
END OF ls_data,
lt_data LIKE TABLE OF ls_data WITH KEY name,
lr_ref_itab TYPE REF TO data,
lr_struc TYPE REF TO cl_abap_structdescr,
ls_comp TYPE abap_compdescr.
FIELD-SYMBOLS: <ft_tab> TYPE ANY TABLE,
<fs_value> TYPE any,
<fs_tab> TYPE any.
*--------------------------------------------------------
START-OF-SELECTION.
CREATE DATA lr_ref_itab TYPE STANDARD TABLE OF (p_tab).
ASSIGN lr_ref_itab->* TO <ft_tab>.
SELECT * FROM (p_tab) INTO TABLE <ft_tab>.
lr_struc ?= cl_abap_typedescr=>describe_by_name( p_tab ).
LOOP AT <ft_tab> ASSIGNING <fs_tab>.
LOOP AT lr_struc->components INTO ls_comp.
IF ls_comp-name(2) = 'ZZ'.
ASSIGN COMPONENT ls_comp-name OF STRUCTURE <fs_tab> TO <fs_value>.
IF <fs_value> IS NOT INITIAL.
ls_data-name = ls_comp-name.
ls_data-zaehl = 1.
COLLECT ls_data INTO lt_data.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
LOOP AT lt_data INTO ls_data.
WRITE: /2 ls_data-name,
30 ls_data-zaehl.
ENDLOOP.
VG