So nutzen Sie die SQL MAP Function

Irvin Rodin

Geschrieben von: Irvin Rodin - 17 November 2022
(Aktualisiert am: 28 November 2022)

In einem früheren Beitrag, “So nutzen Sie Window Functions in SQL Script”, haben wir die Window Function vorgestellt, mit der Sie Partitionen innerhalb des SELECT Befehls generieren können.

In diesem Artikel stellen wir Ihnen mit MAP Function eine weitere praktische Funktion vor, mit der Sie einfache Mapping-Regeln abbilden können. Diese Funktion sucht nach einem Ausdruck innerhalb einer Menge von Suchwerten und gibt das entsprechende Ergebnis zurück. Sie ist mit IF/ELSE oder CASE Anweisungen in ABAP vergleichbar.

Syntax

Die Syntax der MAP Function sieht wie folgt aus:

MAP (<Ausdruck>, <Suche>, <Ergebnis> [{, <Suche>, <Ergebnis>}...] [, Standard_Ergebnis])

Dabei können Sie beliebig viele Such- und Ergebnispaare definieren. Wenn der gesuchte Wert nicht gefunden wird und ein Standard-Ergebnis definiert wurde, gibt die Funktion das vordefinierte Ergebnis aus. Falls kein Standard-Ergebnis definiert wurde, gibt die Funktion “NULL” aus. Suchwerte und entsprechende Ergebnisse werden in Paaren ausgegeben.

Beispiele

Betrachten wir zur Verdeutlichung ein einfaches Beispiel. Mit dem folgenden Code suchen wir im Ausdruck 3 nach den Werten 0, 1, 2 und 3. Falls der Wert 0 gefunden wird, wird Null ausgegeben. Wird der Wert 1 gefunden, wird Eins ausgegeben. Und so weiter.

SELECT MAP(3, 0, 'Null', 1, 'Eins', 2, 'Zwei', 3, 'Drei', 'Standard') "map" FROM DUMMY;

Da wir nur einen Wert, die 3, im Ausdruck definiert haben, wird die 3 auch gefunden und “Drei” wird ausgegeben.

001-wert-gefunden

Betrachten wir das nächste Beispiel. Nun suchen wir nach denselben Werten, allerdings im Ausdruck 815.

SELECT MAP(815, 0, 'Null', 1, 'Eins', 2, 'Zwei', 3, 'Drei', 'Standard') "map" FROM DUMMY;

Da keines der Suchbegriffe gefunden wurde, wird das vordefinierte Ergebnis, also “Standard”, ausgegeben.

002-wert-nicht-gefunden-standard-wert

Nun betrachten wir den Code, bei dem kein Standardwert definiert wurde.

SELECT MAP(815, 0, 'Null', 1, 'Eins', 2, 'Zwei', 3, 'Drei') "map" FROM DUMMY;

Da kein Standardwert vorgegeben wurde, wird der Initialwert “NULL” ausgegeben.

003-initialer-wert-null


Steigern Sie die Leistung Ihres BW mit SQLScript!
Hier geht es zum Whitepaper!

SAP SQLScript Whitepaper


Im SAP-Kontext können Sie mit der MAP Function Kategorien zu Produktstammdaten on the fly zuordnen:

SELECT "PRODUCT" AS Produkt,

        MAP("PRODUCT",

        'SM', 'Smartphone',

        'SP', 'Smartphone',

        'TM', 'Tablet',

        'TP', 'Tablet') as Kategorie

FROM "/BI0/MPRODUCT"

 

004-produkt-kategorie

Betrachten wir ein anderes Beispiel, wo mithilfe der MAP Function der Lieferstatus der Bestellung ausgegeben wird.

SELECT

        "PO_NUMBER" AS Bestellnr,

        "ACT_DL_DTE" AS Lieferdatum,

        MAP("ACT_DL_DTE",

        '00000000', 'offen',

        current_date, 'heute geliefert',

        'geliefert') AS Lieferstatus

FROM "/BIC/AZD023R0017"

GROUP BY

        "PO_NUMBER","ACT_DL_DTE"

Beachten Sie dabei, dass das Lieferdatum # (nicht zugeordnet) SAP intern als 00000000 gespeichert wird. Das heißt, dass nicht gelieferte Bestellungen das Datum 00000000 tragen. Diesen wird der Status “offen” zugeordnet. Alle Bestellungen, die am heutigen Datum geliefert wurden, werden mit dem Lieferstatus “heute geliefert” ausgegeben. Dabei wird das aktuelle Datum über die SQL Function current_date bestimmt. Die Bestellungen mit allen anderen Lieferdaten werden als “geliefert” gekennzeichnet.

005-lieferdatum

MAP Function - Unser Fazit

Mit der SQL MAP Function haben Sie ein nützliches Werkzeug in petto, mit dem Sie einfache Mapping-Regeln abbilden können.

Haben Sie Fragen zu SAP HANA SQLScript? Versuchen Sie das nötige Know-How in Ihrer Abteilung aufzubauen oder benötigen Sie Unterstützung bei einer konkreten Fragestellung? Wir helfen Ihnen gerne dabei. Fordern Sie noch heute ein unverbindliches Beratungsangebot an!

Erfahren Sie mehr über  SAP HANA SQLScript

Themen: SAP BW/4HANA, SAP HANA SQL

Beitrag teilen

Sie haben eine Frage zum Blog?
Fragen Sie Irvin Rodin