In diesem Thema wird die Verwendung der SELECT-Funktion und anderer Spaltenfunktionen beschrieben, um Wiederholungsfelder in einer Nachrichtenbaumstruktur zu bearbeiten.
Angenommen, Sie möchten eine spezielle Aktion an Rechnungen durchführen, deren Gesamtbestellwert größer als ein bestimmter Betrag ist. Um den Gesamtbestellwert eines Rechnungsfelds (Invoice) zu berechnen, müssen Sie die Preisfelder (Price) mit den Mengenfeldern (Quantity) in allen Artikeln (Items) in der Nachricht multiplizieren und das Ergebnis zusammenzählen. Hierfür können Sie eine SELECT-Anweisung folgendermaßen verwenden:
( SELECT SUM( CAST(I.Price AS DECIMAL) * CAST(I.Quantity AS INTEGER) ) FROM Body.Invoice.Purchases."Item"[] AS I )
In dem Beispiel wird vorausgesetzt, dass Sie CAST-Ausdrücke verwenden müssen, um die Zeichenfolgewerte der Felder Price und Quantity in die korrekten Datentypen umzusetzen. Die Umsetzung des Felds Price in eine Dezimalzahl erzeugt einen Dezimalwert mit der natürlichen Anzahl an Nachkommastellen und Genauigkeit (d. h. mit der Anzahl an Nachkommastellen und Genauigkeit, die zur Darstellung der Zahl erforderlich sind). Diese Umsetzungen wären nicht erforderlich, wenn die Daten bereits in einem passenden Datentyp vorlägen.
Der Auswahlausdruck (SELECT) funktioniert auf ähnliche Weise wie die Vergleichsfunktion und sehr ähnlich wie SELECT in Standarddatenbank-SQL. Die FROM-Klausel gibt an, was iteriert wird (in diesem Fall alle Item-Felder in Invoice) und legt fest, dass die aktuelle Instanz von Item mittels I referenziert werden kann. Bei dieser Form von SELECT ist eine Spaltenfunktion involviert, in diesem Fall die Funktion SUM, d. h. SELECT wird ausgewertet, indem die Ergebnisse der Auswertung des Ausdrucks in der SUM-Funktion für jedes Item-Feld in Invoice addiert werden. Wie auch bei standardmäßigem SQL werden Nullwerte von Spaltenfunktionen ignoriert, mit Ausnahme der unten erklärten COUNT-Funktion; und ein Nullwert wird nur von der Spaltenfunktion zurückgegeben, wenn keine Nicht-Nullwerte kombiniert werden können.
Die anderen bereitgestellten Spaltenfunktionen sind MAX, MIN und COUNT. Die COUNT-Funktion weist zwei Formen auf, die hinsichtlich Nullwerte auf verschiedene Art funktionieren. In der ersten Form wird sie ähnlich wie die obige SUM-Funktion verwendet. Beispiel:
SELECT COUNT(I.Quantity) FROM Body.Invoice.Purchases."Item"[] AS I
Dieser Ausdruck gibt die Zahl der Item-Felder zurück, für die das Feld Quantity kein Nullwert ist. D. h. die COUNT-Funktion zählt die Werte, die kein Nullwert sind, auf die gleiche Weise wie die SUM-Funktion die Nicht-Nullwerte addiert. Die alternative Methode zur Verwendung der COUNT-Funktion sieht folgendermaßen aus:
SELECT COUNT(*) FROM Body.Invoice.Purchases."Item"[] AS I
Bei COUNT(*) wird die Gesamtzahl der Item-Felder gezählt, unabhängig davon, ob eines der Felder NULL ist. Das obige Beispiel entspricht der Nutzung der CARDINALITY-Funktion wie im folgenden Beispiel:
CARDINALITY(Body.Invoice.Purchases."Item"[]
In all den Beispielen zu SELECT könnten Sie (genauso wie bei standardmäßigem SQL) mit einer WHERE-Klausel eine Filterung für die Felder bereitstellen.