WHERE-Bedingung
Die WHERE-Bedingung und die JOIN-Bedingung sind identisch. Das SELECT-Statement
Code: Alles auswählen.
SELECT SUM( mbew~verpr * resb~bdmng ) AS WertRes
FROM mbew INNER JOIN resb ON mbew~matnr = resb~matnr
INTO CORRESPONDING FIELDS OF TABLE @lt_wertres
WHERE resb~matnr = @resb-matnr.
liest den Wert für eine Materialnummer aus dem Tabellenarbeitsbereich resb.
Z. B. der Tabellenarbeitsbereich resb enthält die Materialnummer '000000001220004000'. Das SELECT-Statement wird wie folgt an die Datenbank gesendet:
Code: Alles auswählen.
SELECT SUM( mbew~verpr * resb~bdmng ) AS WertRes
FROM mbew INNER JOIN resb ON mbew~matnr = resb~matnr
INTO CORRESPONDING FIELDS OF TABLE @lt_wertres
WHERE resb~matnr = '000000001220004000'.
Das @-Symbol kennzeichnet im strikten Modus eine Hostvariable, die durch einen Wert ersetzt wird. Die Transaktion ST05 macht den Ersatz der Hostvariablen sichtbar.
Das SELECT-Statement
Code: Alles auswählen.
SELECT SUM( mbew~verpr * resb~bdmng ) AS WertRes
FROM mbew INNER JOIN resb ON mbew~matnr = resb~matnr
INTO CORRESPONDING FIELDS OF TABLE @lt_wertres
WHERE mbew~matnr = resb~matnr.
ist identisch zu
Code: Alles auswählen.
SELECT SUM( mbew~verpr * resb~bdmng ) AS WertRes
FROM mbew INNER JOIN resb ON mbew~matnr = resb~matnr
INTO CORRESPONDING FIELDS OF TABLE @lt_wertres.
resb~matnr ist keine Hostvariable und wird unverändert übernommen.
Ergebnismenge
Die Ergebnismenge enthält nur eine Zeile. Es braucht dazu eigentlich keine interne Tabelle. Als Ergebnismenge kann hier eine Struktur angegeben werden.
Code: Alles auswählen.
SELECT SUM( mbew~verpr * resb~bdmng ) AS WertRes
FROM mbew INNER JOIN resb ON mbew~matnr = resb~matnr
INTO CORRESPONDING FIELDS OF @ls_wertres
WHERE resb~matnr = @resb-matnr.
Soll die Ergebnismenge mehrere Zeilen enthalten, ist eine GROUP-BY-Klausel notwendig.
Auf die Materialbewertung bezogene Probleme
- Wenn die getrennte Bewertung für Materialnummern aktiviert ist (z.B. Bewertungsebene liegt auf Chargenebene), kann der Wert zu groß werden. Die Tabelle MBEW enthält in diesem Fall mehrere Einträge für eine Materialnummer und diese werden alle im JOIN berücksichtigt.
- Die Formel mbew~verpr * resb~bdmng liefert zudem nur ein richtiges Resultat, wenn der GLD-Preis aktiviert ist. Für Materialnummern mit Standardpreisen muss die Spalte MBEW-STPRS herangezogen werden. Die Unterscheidung ist anhand des Preissteuerungsfeldes möglich (MBEW-VPRSV)
- Bewertungskreise: Die Materialbewertung ist auf Materialnummerebene und Bewertungskreisebene organisiert. Der Bewertungskreis sollte in den JOIN mit aufgenommen werden. Reservierungen liegen auf Werksebene. Werke sind in der Tabelle T001W Bewertungenkreisen zugeordnet.
Eine JOIN, der die Bewertungskreisebene mit berücksichtigt:
Code: Alles auswählen.
SELECT SUM( mbew~verpr * resb~bdmng ) AS WertRes
FROM resb INNER JOIN t001w ON t001w~werks = resb~werks
INNER JOIN mbew ON mbew~matnr = resb~matnr AND mbew~bwkey = t001w~bwkey
INTO CORRESPONDING FIELDS OF @ls_wertres
WHERE resb~matnr = @resb-matnr.