[ABAP] OpenSQL: Verknüpfung von Tabelleninhalten über INNER JOIN, Zählung einzelner Datensatzgruppen (COUNT)

TYPES: BEGIN OF ty_ttxid,
         tdobject TYPE ttxid-tdobject,
         tdid     TYPE ttxid-tdid,
         tdtext   TYPE ttxit-tdtext,
         count    TYPE i,
       END OF ty_ttxid.
       
DATA: it_ttxid TYPE STANDARD TABLE OF ty_ttxid WITH DEFAULT KEY.

* count ist die Zählvariable für die Elemente der Gruppe, welche unter GROUP BY definiert wurde
* es werden nur Datensätze gezählt, die auch vorhanden sind, d.h. es gibt keine Werte mit count = 0
SELECT ttxid~tdobject, ttxid~tdid, ttxit~tdtext, COUNT( * ) AS count
  INTO CORRESPONDING FIELDS OF TABLE @it_ttxid
  FROM ttxid
  INNER JOIN ttxit ON ( ttxid~tdobject = ttxit~tdobject AND ttxid~tdid = ttxit~tdid )
  INNER JOIN stxh ON ( stxh~tdobject = ttxid~tdobject AND stxh~tdid = ttxid~tdid )
  WHERE ttxid~tdobject LIKE @p_obj
    AND ttxid~tdid LIKE @p_tdid
    AND stxh~tdfdate IN @so_date
    AND ttxit~tdspras = @p_lang
  GROUP BY ttxid~tdobject, ttxid~tdid, ttxit~tdtext.

[ABAP] OpenSQL: Tabelleninhalte zusammenfügen (mergen)

Variante 1 (ab NW 7.40 SP08)

* it_status hat zwei Spalten mit jeweils einer tiefen Struktur
SELECT jcds~*, tj02t~*
  FROM jcds INNER JOIN tj02t
  ON jcds~stat = tj02t~istat
  WHERE tj02t~spras = @sy-langu
  INTO TABLE @DATA(it_status)
  UP TO 100 ROWS.

IF sy-subrc = 0.
  cl_demo_output=>display( it_status ).
ENDIF.

Variante 2 (bis NW 7.40 SP08)

* it_status hat alle Spalten aus beiden includierten Strukturen
TYPES: BEGIN OF ty_data.
        INCLUDE TYPE jcds.
        INCLUDE TYPE tj02t.
TYPES: END OF ty_data.

DATA: it_status TYPE STANDARD TABLE OF ty_data WITH DEFAULT KEY.

SELECT jcds~*, tj02t~*
  FROM jcds INNER JOIN tj02t
  ON jcds~stat = tj02t~istat
  WHERE tj02t~spras = @sy-langu
  INTO TABLE @it_status
  UP TO 100 ROWS.

IF sy-subrc = 0.
  cl_demo_output=>display( it_status ).
ENDIF.

[ABAP] OpenSQL: Wildcards (%) im SELECT-Statement verwenden

Beispiel 1: PARAMETERS mit Wildcard (%)

DATA: it_spfli TYPE STANDARD TABLE OF spfli.

PARAMETERS: p_carr TYPE spfli-carrid DEFAULT '%'.
  
* SELECT mit LIKE, für % als Wildcard
SELECT * FROM spfli
  INTO TABLE @it_spfli
  WHERE carrid LIKE @p_carr.

Beispiel 2: WHERE-Clause mit Wildcard (%)

DATA: it_usr TYPE STANDARD TABLE OF usr02 WITH DEFAULT KEY.

* alle Namen, die mit "Z" beginnen
SELECT * FROM usr02 INTO TABLE it_usr WHERE bname LIKE 'Z%'.

[ABAP] OpenSQL: Verknüpfte Abfrage mehrerer Tabellen, INNER JOIN, Alias

PARAMETERS: p_name TYPE string DEFAULT 'xyz'.

START-OF-SELECTION.

* SELECT durch Verknüpfung über mehrere Tabellen
  SELECT u~bname,
         u~persnumber,
         u~addrnumber,
         a~smtp_addr
    INTO TABLE @DATA(it_usr)
    FROM usr21 AS u
    INNER JOIN adr6 AS a ON a~persnumber = u~persnumber AND a~addrnumber = u~addrnumber
    WHERE u~bname = @name.

  cl_demo_output=>display( it_usr ).