Select cast Substring in einem Inner-Join
Siehe Schlüsselbefehl Select.
Siehe Kategorie:Neues ABAP.
Siehe Select Substring.
Es kann der Fall auftreten, dass man Felder im Inner-Join nicht direkt joinen kann, da sie eine unterschiedliche Feldlänge haben, z. B. EKPO-EBELP (Numc5) <> KONV-KPOSN (Numc6), obwohl sie eigentlich jeweils in diesem Fall die Bestellposition speichern.
Typkonflikt
Ein direkter Inner-Join würde zu keinem Ergebnis kommen
Select ... from ekko inner join ekpo on ekpo~ebeln = ekko~ebeln INNER JOIN konv ON konv~knumv = ekko~knumv and konv~kposn = ekpo~ebelp
Cast Substring
Der Inner-Join wird nun angepasst mit CAST SUBSTRING, wo nur 5 Zeichen vom Feld KONV-KPOSN angesprochen werden und mit EKPO-EBELP gleichgesetzt wird.
Select ... from ekko inner join ekpo on ekpo~ebeln = ekko~ebeln INNER JOIN konv ON konv~knumv = ekko~knumv AND CAST( SUBSTRING( konv~kposn, 2, 5 ) AS NUMC( 5 ) ) = ekpo~ebelp ...
In einem anderen Beispiel, von die Felder LIPS-VKPOS und EKPO-EBELP unterschiedlichen Datentyp haben (NUMC6 und NUMC5).
Es wird hier die kleinste Lieferposition und passende Bestellposition gelesen zum Inputparameter IV_VBELN_LF.
SELECT
likp~vbeln,
SUBSTRING( likp~kunnr, 7, 4 ),
ekpo~lgort
FROM likp
inner join lips
on lips~vbeln = likp~vbeln
inner join ekpo
on lips~vgbel = ekpo~ebeln
and CAST( SUBSTRING( lips~vgpos, 2, 5 ) AS NUMC( 5 ) ) = ekpo~ebelp
WHERE likp~vbeln = iv_vbeln_lf
order by lips~posnr
INTO (@ev_vbeln_lf,
@ev_werks,
@ev_lgort)
up to 1 rows.
endselect.
In einem weiteren Beispiel musste das Feld EKBE-BUZEI (NUMC4) mit LIPS-POSNR (NUMC6) verknüpft werden.
Select ekko~ebeln, ekpo~matnr, ekpo~lgort, lips~lfimg from ekko "Tabelle: Bestellung Kopf inner join ekpo "Tabelle: Bestellposition on ekpo~ebeln = ekko~ebeln inner join ekbe "Tabelle: Bestellhistorie on ekbe~ebeln = ekpo~ebeln and ekbe~ebelp = ekpo~ebelp and ekbe~vgabe = '8' "Verknüpfung zur Lieferung inner join lips "Tabelle: Lieferposition on lips~vbeln = ekbe~belnr and CAST( SUBSTRING( lips~posnr, 3, 4 ) AS NUMC( 4 ) ) = ekbe~buzei where ...
CAST-Statement im CDS
- In CDS-Views funktioniert die CAST-Lösung in der FROM-Klausel allerdings leider nicht. Siehe SAP-Hilfe: CAST-Express im CDS (EN)
- Hier muss man dann eine andere Lösung finden.
Ein Kollege hat diese Lösung realisiert, wo das 5stellige Feld EKPO-EBELP zu einem 6stelligen Feld mit einer führenden Null konvertiert wird.
key cast(lpad(ekpo.ebelp,6,'0') as abap.numc( 6 ) ) as ebelp,