Join 

Beim Join werden Datensätze aus zwei oder mehreren Infotypen zusammen verarbeitet. Die Daten aus den Infotypen werden teilzeitraumgenau zur Verfügung gestellt.

Wir ermitteln für einen Mitarbeiter, in welchen Zeiträumen er unter welcher Adresse an welcher Stelle gearbeitet hat.

Folgende Adreßdaten liegen vor:

Januar - Juni

Hamburg

Juni - Dezember

München


Folgende Arbeitsplatzdaten liegen vor:

Januar - April

Ausbilder

Mai - Dezember

Referent


Wenn die Adreßdaten und die Arbeitsplatzdaten teilzeitraumgenau zur Verfügung gestellt werden, ergibt sich folgender Sachverhalt:

Januar - April

Hamburg / Ausbilder

Mai - Juni

Hamburg / Referent

Juli - Dezember

München / Referent


Im der ABAP/4®-Syntax ist ein solcher Join folgendermaßen realisiert:

PROVIDE * FROM Pmmmm
        * FROM Pnnnn
        BETWEEN PN-BEGDA AND PN-ENDDA.

Die jeweiligen Teilzeiträume stehen im ersten Infotyp Pmmmm , im zweiten Infotyp Pnnnn sowie in allen weiteren Infotypen des Join in den Feldern BEGDA und ENDDA zur Verfügung.

Bedingung für einen solchen Join ist, daß die Daten eines jeden beteiligten Infotypen zu jedem Zeitpunkt auf der Zeitachse eindeutig zur Verfügung stehen. Die Sätze eines Infotypen dürfen sich zeitlich nicht überschneiden, d.h. die Infotypen mit Zeitbindung drei sind für den Join ausgeschlossen.

Eine zeitliche Überschneidung von Sätzen liegt auch vor, wenn ein Infotyp ohne Einschränkung auf seine Subtypen gelesen wird. So hat zum Beispiel der Infotyp Anschriften die Subtypen Hauptanschrift , Zweitwohnsitz und Heimatanschrift .

Lesen wir alle Anschriften, dann sind zeitliche Überschneidungen nicht zu vermeiden. Deshalb muß bei einem Join in jedem Falle ein Subtyp ausgewählt werden, der wiederum nicht die Zeitbindung drei besitzen darf.

Das obengenannte Beispiel für einen Join auf Arbeitsplatzdaten und Anschriftsdaten ist wie folgt zu kodieren:

REPORT RPABAP03.
TABLES: PERNR.
INFOTYPES: 0001, 0006.
GET PERNR.
  PROVIDE * FROM P0001
          * FROM P0006 BETWEEN PN-BEGDA AND PN-ENDDA
          WHERE P0006-SUBTY eq '1'.
    WRITE: / PERNR-PERNR, P0001-STELL,
             P0006-STRAS, P0006-BEGDA,P0006-ENDDA.
  ENDPROVIDE.

Nun kann der Fall eintreten, daß zu einem gebildeten Teilzeitraum zu einem der beteiligten Infotypen keine Daten vorliegen. Zwar sind Überschneidungen auf der Zeitachse nicht zulässig, Lücken sind aber erlaubt.

Ein solcher Fall ergibt sich zum Beispiel, wenn Personendaten mit Anschriftsdaten gejoint werden:

Personendaten:

Januar 1960 - Mai 1993

Müller

Mai 1993 - Dezember 1993

Schmidt


Anschriftsdaten:

Januar 1993 - Dezember 1993

Hamburg


Ein Join auf Personen- und Anschriftsdaten ergibt folgenden Sachverhalt:

Januar 1960 - Dezember 1992

Müller

Januar 1993 - April 1993

Müller / Hamburg

Mai 1993 - Dezember 1993

Schmidt / Hamburg


Im ersten Teilintervall liegen lediglich Personendaten vor. Der Satz ist nicht aussagekräftig, da die Aufgabe des Join, Daten aus allen beteiligten Infotypen zur Verfügung zu stellen, nicht erfüllt ist.

Mit Hilfe der Variablen Pnnnn_VALID wird erkannt, daß in einem Teilintervall nur unvollständige Daten vorliegen.

Diese Variable wird zur Laufzeit des Reports für jeden Infotyp Pnnnn gebildet, der an einem Join beteiligt ist.

Liegen in dem jeweiligen Teilintervall für den Infotyp Pnnnn Daten vor, ist seine Variable Pnnnn_VALID mit X gefüllt.

Die Auswertung dieser Variablen stellt sich folgendermaßen dar:

REPORT RPDEMO03.
TABLES: PERNR.
INFOTYPES:  0002,
            0006.
GET PERNR.
  PROVIDE * FROM P0002
          * FROM P0006 BETWEEN PN-BEGDA AND PN-ENDDA
          WHERE P0006-SUBTY = '1'.
    IF P0006_VALID EQ 'X'.
      WRITE:  /  PERNR-PERNR,
                 P0002-BEGDA DD/MM/YYYY,
                 P0002-ENDDA DD/MM/YYYY,
                 P0002-NACHN,
                 P0006-ORT01.
    ENDIF.
  ENDPROVIDE.

Es wird nur dann eine Listausgabe durchgeführt, wenn Anschritsdaten vorhanden sind. Damit wird das erste Teilintervall, in dem nur Personendaten vorliegen, unterdrückt.