Page 1 of 1

Felder mehrerer Tabellen zählen

PostPosted: 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

PostPosted: Thu Apr 13, 2017 12:17 pm
by Lionel2429
Kann mir keiner helfen?

Re: Felder mehrerer Tabellen zählen

PostPosted: Thu Apr 13, 2017 12:47 pm
by Lionel2429
Kann mir keiner helfen?

Re: Felder mehrerer Tabellen zählen

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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

PostPosted: 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