Code: Alles auswählen.
LINES( itab )
Schau dir in der Hilfe JOIN, GROUP BY und COUNT an.ChrissixD hat geschrieben:Wie muss ich da vorgehen? Könnte das jemand für ein Leien erkären?
Code: Alles auswählen.
SELECT kennzahl~key
kennzahl~bezeichnung
COUNT(kunde~key)
INTO TABLE itab
FROM Kennzahl
JOIN kunde
ON kunde~kennzahlkey = Kennzahl~key
WHERE Kennzahl~key IN selopt_kennzahl
GROUP BY Kennzahl~key Kennzahl~bezeichnung.
Code: Alles auswählen.
SELECT kennzahl~key
kennzahl~bezeichnung
INTO CORRESPONDING FIELDS OF TABLE itab
FROM Kennzahl
WHERE Kennzahl~key IN selopt_kennzahl.
loop at itab assigning fieldsymbol(<ls_itab>).
SELECT COUNT( * )
INTO <ls_itab>-...
FROM kunde
WHERE Kennzahl~key = <ls_itab>-key.
endloop.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ChrissixD
Code: Alles auswählen.
TYPES: BEGIN OF ty_kunden_kennzahl,
brsch TYPE t016t-brsch,
brtxt TYPE t016t-brtxt,
anzahl TYPE i,
END OF ty_kunden_kennzahl,
tt_kunden_kennzahl TYPE TABLE OF ty_kunden_kennzahl.
DATA: gt_kunden_kennzahl TYPE tt_kunden_kennzahl.
DATA: gs_kunden_kennzahl TYPE ty_kunden_kennzahl.
FIELD-SYMBOLS: <gs_kunden_kennzahl> TYPE ty_kunden_kennzahl.
SELECT-OPTIONS: so_brsch FOR gs_kunden_kennzahl-brsch.
START-OF-SELECTION.
SELECT brsch brtxt FROM t016t
INTO CORRESPONDING FIELDS OF TABLE gt_kunden_kennzahl
WHERE brsch IN so_brsch.
LOOP AT gt_kunden_kennzahl ASSIGNING <gs_kunden_kennzahl>.
SELECT COUNT( * ) FROM kna1
INTO <gs_kunden_kennzahl>-anzahl
WHERE brsch = <gs_kunden_kennzahl>-brsch.
ENDLOOP.
LOOP AT gt_kunden_kennzahl ASSIGNING <gs_kunden_kennzahl>.
WRITE: / <gs_kunden_kennzahl>-brtxt, <gs_kunden_kennzahl>-anzahl.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
ChrissixD
Code: Alles auswählen.
TYPES: BEGIN OF ty_kunden_kennzahl,
brsch TYPE t016t-brsch,
brtxt TYPE t016t-brtxt,
anzahl TYPE i,
END OF ty_kunden_kennzahl,
tt_kunden_kennzahl TYPE TABLE OF ty_kunden_kennzahl.
DATA: gt_kunden_kennzahl TYPE tt_kunden_kennzahl.
DATA: gs_kunden_kennzahl TYPE ty_kunden_kennzahl.
DATA: gs_kna1 TYPE kna1.
FIELD-SYMBOLS: <gs_kunden_kennzahl> TYPE ty_kunden_kennzahl.
SELECT-OPTIONS: so_brsch FOR gs_kunden_kennzahl-brsch.
SELECT-OPTIONS: so_kunnr FOR gs_kna1-kunnr.
START-OF-SELECTION.
SELECT brsch brtxt FROM t016t
INTO CORRESPONDING FIELDS OF TABLE gt_kunden_kennzahl
WHERE brsch IN so_brsch
AND spras = sy-langu.
LOOP AT gt_kunden_kennzahl ASSIGNING <gs_kunden_kennzahl>.
SELECT COUNT( * ) FROM kna1
INTO <gs_kunden_kennzahl>-anzahl
WHERE brsch = <gs_kunden_kennzahl>-brsch
AND kunnr IN so_kunnr. .
ENDLOOP.
LOOP AT gt_kunden_kennzahl ASSIGNING <gs_kunden_kennzahl>.
WRITE: / <gs_kunden_kennzahl>-brtxt, <gs_kunden_kennzahl>-anzahl.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
ChrissixD
Code: Alles auswählen.
LOOP AT gt_kunden_kennzahl ASSIGNING <gs_kunden_kennzahl>. "Feldsymbol
SELECT COUNT( * ) FROM kna1
INTO <gs_kunden_kennzahl>-anzahl
WHERE brsch = <gs_kunden_kennzahl>-brsch
AND kunnr IN so_kunnr. .
ENDLOOP.
Code: Alles auswählen.
DATA: gv_tabix TYPE sy-tabix.
LOOP AT gt_kunden_kennzahl INTO gs_kunden_kennzahl. "Workarea (ohne eckige Klammern)
gv_tabix = sy-tabix.
SELECT COUNT( * ) FROM kna1
INTO gs_kunden_kennzahl-anzahl
WHERE brsch = gs_kunden_kennzahl-brsch
AND kunnr IN so_kunnr. .
MODIFY gt_kunden_kennzahl FROM gs_kunden_kennzahl INDEX sy-tabix.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
ChrissixD
Zumindest wird das überall so behauptet und macht ja auch Sinn, weil beim INTO ein Wert/Struktur/Tabelle von einer Speicherstelle auf eine andere kopiert werden muss, was beim ASSIGNING halt wegfällt.PeterPaletti hat geschrieben:Angeblich soll ein LOOP ASSIGNING auch schneller gehen als ein LOOP INTO.
Wenn wir schon über Performance reden, würde wahrscheinlich Sinn machen zu erst alle Branchen incl. Bezeichnung zu selektieren und dann mit einem Select und FOR ALL ENTRIES auf die KNA1 zu zugreifen. Dies sollte schneller sein, als 20-30 einzel Selects.PeterPaletti hat geschrieben: Allerdings, wie viele Branchenschlüssel hat der TE wohl auf seinem System 20? 30? Das wird wohl nicht gleich in die Tausende gehen. Von daher vermute ich mal dass der Performancegewinn durch das ASSIGNING nicht so überragend groß ausfallen wird.