Ansicht
Dokumentation

ABAPHAVING_CLAUSE - HAVING CLAUSE

ABAPHAVING_CLAUSE - HAVING CLAUSE

General Material Data   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT, HAVING

Kurzreferenz



... HAVING sql_cond ...

Wirkung

Der Zusatz HAVING schränkt die Anzahl von zu Gruppen zusammengefassten Zeilen in der Ergebnismenge einer Query durch einen logischen Ausdruck sql_cond für diese Zeilen ein. Der logische Ausdruck wertet die Inhalte von Zeilengruppen aus. Es werden die Zeilen in die Ergebnismenge aufgenommen, für die der logische Ausdruck wahr ist.

Bezüglich der Operanden der relationalen Ausdrücke des logischen Ausdrucks sql_cond gelten folgende Besonderheiten:

  • Als Operanden verwendete nicht aggregierte Spalten der hinter FROM aufgeführten Datenquellen müssen nicht als solche in der SELECT-Liste aber hinter dem Zusatz GROUP BY aufgeführt sein. Es wird für jede Gruppe der Wert ausgewertet, nach dem gruppiert wird.
  • Wenn SQL-Ausdrücke auf der linken Seite verwendet werden, muss entweder der gleiche Ausdruck oder es müssen alle nicht aggregierte Spalten des Ausdrucks einzeln hinter GROUP BY aufgeführt sein.
  • In einer HAVING-Bedingung können Aggregatausdrücke sql_agg direkt oder als Operanden von SQL-Ausdrücken auf beiden Seiten von Vergleichen verwendet werden. Spalten, die direkt oder über einen SQL-Ausdruck als Argument eines Aggregatausdrucks angegeben sind, müssen nicht hinter GROUP BY aufgeführt werden. Ein solcher Aggregatausdruck wird für jede in GROUP BY definierte Zeilengruppe ausgewertet und sein Ergebnis als Operand des Vergleichs verwendet. Die Aggregatfunktionen der SELECT-Liste und der HAVING-Klausel und die darin als Argumente angegebenen SQL-Ausdrücke können verschieden sein.

Wenn eine HAVING-Klausel angegeben ist, müssen alle Spalten der SELECT-Liste, die dort keine Argumente von Aggregatausdrücken sind, hinter GROUP BY aufgeführt sein. Wenn die SELECT-Liste als * angegeben ist, kann es keine HAVING-Klausel ohne GROUP BY-Klausel geben.

Für die HAVING-Klausel wirkt die implizite Mandantenbehandlung von . Die Mandantenspalte einer mandantenabhängigen Datenquelle darf in der HAVING-Bedingung nicht als Operand verwendet werden.

Hinweise

  • Aggregatausdrücke auf der linken Seite eines logischen Ausdrucks hinter HAVING sind SQL-Ausdrücke. Dort können somit alle SQL-Ausdrücke außer Fensterausdrücken angegeben werden. Aggregatausdrücke auf der rechten Seite eines logischen Ausdrucks sind eine Ausnahme von der Regel, dass an dieser Stelle keine SQL-Ausdrücke angegeben werden können.
  • Spalten, die hinter HAVING als Argumente von Aggregatausdrücken aufgeführt sind, dürfen auch hinter GROUP BY aufgeführt sein.
  • Wenn eine Spaltenangabe aus einem Pfadausdruck besteht, werden beim Vergleich zwischen SELECT-Liste und HAVING-Klausel auch die Parameterübergabe und die Angabe von Attributen berücksichtigt.
  • Wenn der Zusatz GROUP BY nicht angegeben ist oder das Datenobjekt column_syntax bei der dynamischen Spaltenangabe hinter GROUP BY initial ist, kann der Zusatz HAVING nur dann angegeben werden, wenn die gesamte Ergebnismenge in eine Zeile gruppiert ist, d.h., wenn hinter SELECT ausschließlich Aggregatausdrücke stehen. In diesem Fall können in sql_cond ausschließlich Aggregatausdrücke als Operanden angegeben werden, die für alle Zeilen der Ergebnismenge ausgewertet werden.
  • Wenn auf der linken Seite der HAVING-Bedingung ein SQL-Ausdruck oder auf der rechten Seite ein Hostausdruck vorkommt, wird die Syntaxprüfung im strikten Modus ab Release ausgeführt, welche die Anweisung strenger behandelt als die normale Syntaxprüfung.

Beispiel

Auslesen der Anzahl der Anzahl der Buchungen pro Klasse und Flugdatum einer Verbindung.

SQL-Ausdrücke, Verwendung in Aggregatausdrücken






ABAP Short Reference   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 6707 Date: 20240329 Time: 161822     sap01-206 ( 115 ms )