Substring im JOIN auf beiden Seiten

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
3 Beiträge • Seite 1 von 1
3 Beiträge Seite 1 von 1

Substring im JOIN auf beiden Seiten

Beitrag von msfox (Specialist / 383 / 58 / 76 ) »
Über die ST04 kann ich folgenden Befehl absetzen:

Code: Alles auswählen.

select
        t1.mandt,
        t2.psobtyp,
        t2.vtref,
        t1.opbel,
        t2.budat,
        t2.budgetyear,
        substr(t1.cpudt,1,4) as cpudtyear,
        t1.cpudt,
        t2.bldat,
        substr(t2.faedn, 1,4) as faednyear,
        substr(t2.faedn, 1,6) as faedJJJMM,
        t2.faedn,
        t2.hkont              as ford_hkont,
        t2.fmtyp,
        t2.fipex,
        t2.fistl,
        t2.hvorg,
        t2.tvorg,
        t3.hkont             as ertr_hkont,
        t3.gsber,
        t3.prctr,
        t3.posid,
        t2.betrh
  from
        DFKKKO t1
        inner join DFKKOP t2
        on 
            t1.mandt = t2.mandt
        and t1.opbel = t2.opbel
        and t1.cpudt < t2.faedn
        and substr(t1.cpudt,1,4) < substr(t2.faedn, 1,4)
        /* and t2.budat          <> t2.faedn */
        left join ZLGDPSCD_TVGKOFI t3
        on 
            t2.mandt   = t3.mandt
        and t2.psobtyp = t3.psobtyp
        and t2.hvorg   = t3.hvorg
        and t2.tvorg   = t3.tvorg
where
        t1.herkf             = 'TA'
   and  substr(t1.cpudt,1,4) = '2024'
   and  t2.psobtyp          >= '2195'
   and  t2.psobtyp          <= '2199'
Dieses SELECT soll nun in einem Programm verwendet werden, wobei ich für folgenden Zeile keinen Lösung habe:

Code: Alles auswählen.

and substr(t1.cpudt,1,4) < substr(t2.faedn, 1,4)
Im ABAP ist irgendwie nur die linke Seite beim Vergleich als Substring möglich

Code: Alles auswählen.

and SUBSTRING( t1~cpudt , 1 , 4 ) < SUBSTRING( t1~cpudt , 1 , 4 )
Der SUBSTRING( t1~cpudt , 1 , 4 ) wird als Syntaxfehler abgewiesen.

Hat dafür jemand einen Rat für mich?

Aktuell löse sich es so, dass ich erst alles selektiere (20.000 Sätze) und erst auf ABAP-Seite noch einmal die überflüssigen Sätze lösche (Rest 250 Sätze). Beim Select selbst soll aber schon die Treffermenge beschränkt werden (UP TO ... ROWS), damit ich nicht zu viele Daten bekomme. Die Treffermenge ist dann aber unvollständig, weil ja statt den 20.000 nur z.B. 500 Sätze betrachtet werden und diese auch noch alle nicht passen und das Endergebnis dann 0 Treffer hat.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Substring im JOIN auf beiden Seiten

Beitrag von a-dead-trousers (Top Expert / 4419 / 224 / 1189 ) »
Hi. Hast du es schon mal mit einem CDS-View probiert? Wenn es dort mit einem Substing-Vergleich in einem einzigen Join nicht funktionieren sollte, kann man zumindest zwei getrennte Views für jeden Substring anlegen und dann die Ergebnisse in einem dritten View (oder einem SELECT in ABAP) joinen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Substring im JOIN auf beiden Seiten

Beitrag von Radinator (ForumUser / 39 / 8 / 6 ) »
Kannst du den SUBSTRING( t1~cpudt , 1 , 4 ) nicht in der SELECT Klausel eintragen und den Vergleich in der HAVING Klausel durchführen?

Edit: Ich hab grad nochmal etwas weiter geschaut wo eigentlich der Unterschied zwischen WHERE und HAVING besteht. Wenn du zeilenbasierte Abfragen machen willst dann braucht man die WHERE, wohingegen beim Vergleich von Spalten du die HAVING verwendets - oder bei Aggregationsfunktionen wie SUM(), MIN()/MAX(), ...

Wenn du also die SUBSTRING Funktion in der SELECT Klausel verwendest um die Teile zu finden vergleichst du ja Spalten miteinander, was wiederum die WHERE fast schon sinnlos erscheinen lässt. Ergo ipso facto die HAVING erforderlich macht

https://stackoverflow.com/questions/287 ... ere-in-sql
The main difference between WHERE and HAVING clause is, WHERE is used for row operations and HAVING is used for column operations.
https://www.geeksforgeeks.org/differenc ... se-in-sql/

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2882
Views
select join substring
von jspranz » 13.11.2017 18:12 • Verfasst in ABAP® für Anfänger
13
Antw.
6096
Views
substring direkt in IF
von pherweg » 09.02.2018 17:08 • Verfasst in ABAP® Core
7
Antw.
6662
Views
Substring bei SELECT
von cali » 10.05.2006 17:58 • Verfasst in ABAP® Core
1
Antw.
1329
Views
Join mit Left Outer Join
von Rude1986 » 17.01.2021 19:53 • Verfasst in ABAP® für Anfänger
1
Antw.
1251
Views
BSP-Seiten und Unterprogrammen
von Alonso » 08.08.2005 15:22 • Verfasst in Web-Dynpro, BSP + BHTML

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.