*&---------------------------------------------------------------------*
*& Report ZSCH_018_SELECT_WAHNSINN
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsch_018_select_wahnsinn.
* Ohne Fremdschlsselverprobung
* PARAMETERS: pa_cust TYPE zsch_017_td_customerid.
* Mit Primrschlsseleigenschaft
* PARAMETERS: pa_cust TYPE zsch017customer-customid.
* Mit Fremdschlsselverprobung
PARAMETERS: pa_cust TYPE zsch017address-customid.
* Die Kundenadressen
DATA: lt_address TYPE TABLE OF zsch017address,
* Die Arbeitsstruktur
ls_address LIKE LINE OF lt_address.
* Intervallpflege fr die Adressen-ID
SELECT-OPTIONS: so_adr FOR ls_address-addressid.
* Zielstruktur
DATA: ls_customer TYPE zsch017customer.

* Hier geht's los mit der Datenselektion
START-OF-SELECTION.
* Einfaches Auslesen des Kunden/der Kundin
* Genau eine Zeile, alle Spalten
SELECT SINGLE * FROM zsch017customer INTO ls_customer
WHERE customid = pa_cust.
* Falls etwas gefunden wurde
IF sy-subrc = 0. "sy-dbcnt > 0 
* Ausgabe des Namens
WRITE: / ls_customer-vorname,
ls_customer-nachname.

* Variante 1: Mit Array-Fetch 
* Die Adressen lesen
* Nur drei Spalten lesen
* In eine Tabelle speichern (Array-Fetch)
* Die ersten zwei Zeilen aus der Treffermenge
* und sortiert nach der Postleitzahl
SELECT ort strasse plz
FROM zsch017address
INTO CORRESPONDING FIELDS OF TABLE lt_address
UP TO 2 ROWS
WHERE customid = pa_cust
AND addressid IN so_adr
ORDER BY plz ASCENDING.
* Ausgabe der Adressen
LOOP AT lt_address INTO ls_address. 
WRITE: / 'Adresse '(t01),
sy-tabix, ': ',
ls_address-plz,
ls_address-ort,
ls_address-strasse.
ENDLOOP.

Variante 2:
** Variante 2: Mit SELECT-Schleife
* SELECT ort strasse plz
* FROM zsch017address
* INTO CORRESPONDING FIELDS OF ls_address
* UP TO 2 ROWS
* WHERE customid = pa_cust
* AND addressid IN so_adr
* ORDER BY plz ASCENDING.
** Ausgabe der Adressen
* WRITE: / 'Adresse '(t01),
* sy-dbcnt, ': ',
* ls_address-plz,
* ls_address-ort,
* ls_address-strasse.
* ENDSELECT.
ELSE.
WRITE: / 'Leider nichts gefunden'(t02).
ENDIF.

SELECT ort, strasse, plz
FROM zsch017address
INTO CORRESPONDING FIELDS OF @ls_address
UP TO 2 ROWS
WHERE customid = @pa_cust
AND addressid IN @so_adr
ORDER BY plz ASCENDING.
* Ausgabe:
WRITE: / | text-t01 {sy-dbcnt} ': ' {ls_address-plz} {ls_address-ort}
{ls_address-strasse} |.