Select cast Substring in einem Inner-Join

Aus SAP-Wiki
Wechseln zu:Navigation, Suche

Siehe Schlüsselbefehl Select.

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.

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.

Web-Links