COMPUTE (Transact-SQL)

Generiert Gesamtsummen, die als zusätzliche Summenspalten am Ende des Resultsets aufgeführt werden. In Verbindung mit BY generiert die COMPUTE-Klausel Gruppenwechsel und Untersummen im Resultset. Sie können COMPUTE BY und COMPUTE auch in derselben Abfrage angeben.

Wichtiger HinweisWichtig

Diese Funktion wird in der nächsten Version von Microsoft SQL Server entfernt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie so bald wie möglich das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen ROLLUP. Weitere Informationen finden Sie unter GROUP BY (Transact-SQL).

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax


[ COMPUTE 
    { { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM } 
    ( expression ) } [ ,...n ] 
    [ BY expression [ ,...n ] ] 
]

Argumente

  • AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
    Gibt die auszuführende Aggregation an. Mit der COMPUTE-Klausel werden folgende Zeilenaggregatfunktionen verwendet:

    Zeilenaggregatfunktion

    Ergebnis

    AVG

    Durchschnitt der Werte in einem numerischen Ausdruck

    COUNT

    Anzahl von ausgewählten Zeilen

    MAX

    Höchster Wert im Ausdruck

    MIN

    Niedrigster Wert im Ausdruck

    STDEV

    Statistische Standardabweichung aller Werte im Ausdruck

    STDEVP

    Statistische Standardabweichung der Population für alle Werte in dem Ausdruck

    SUM

    Summe der Werte in einem numerischen Ausdruck

    VAR

    Statistische Varianz aller Werte im angegebenen Ausdruck

    VARP

    Statistische Varianz der Population für alle Werte in dem Ausdruck

    Für COUNT(*) gibt es kein Äquivalent. Um die Summeninformationen zu erhalten, die von GROUP BY und COUNT(*) erzeugt werden, können Sie eine COMPUTE-Klausel mit BY verwenden.

    Diese Funktionen ignorieren NULL-Werte.

    Das DISTINCT-Schlüsselwort darf nicht zusammen mit den Zeilenaggregatfunktionen verwendet werden, wenn diese mit der COMPUTE-Klausel angegeben werden.

    Wenn Sie Summen oder Mittelwerte von ganzen Zahlen berechnen, behandelt SQL Server Database Engine (Datenbankmodul) das Ergebnis als Wert vom Datentyp int. Dies gilt auch, wenn die Spalte den Datentyp smallint oder tinyint aufweist. Weitere Informationen zu den Rückgabetypen von Summen- oder Mittelwertdaten finden Sie unter SUM (Transact-SQL) und AVG (Transact-SQL).

    HinweisHinweis

    Um Überlauffehler in ODBC- und DB-Library-Programmen zu vermeiden, sollten Sie alle Variablen für die Ergebnisse von Mittelwerten oder Summen mit dem Datentyp int deklarieren.

  • expression
    Ein Ausdrücke (Transact-SQL), wie z. B. der Name einer Spalte, die berechnet wird. expression muss in der Auswahlliste aufgeführt werden und mit einem der Ausdrücke in der Auswahlliste identisch sein. Ein in der Auswahlliste angegebener Spaltenalias kann nicht in expression verwendet werden.

    HinweisHinweis

    Daten vom Datentyp ntext, text oder image können nicht in einer COMPUTE- oder COMPUTE BY-Klausel angegeben werden.

  • BY expression
    Generiert Gruppenwechsel und Untersummen im Resultset. expression ist eine identische Kopie von order_by_expression in der zugehörigen ORDER BY-Klausel. Normalerweise handelt es sich hierbei um einen Spaltennamen oder einen Spaltenalias. Es können mehrere Ausdrücke festgelegt werden. Werden nach BY mehrere Ausdrücke aufgeführt, wird eine Gruppe in Untergruppen aufgeteilt und die Aggregatfunktion auf jede Gruppierungsebene angewendet.

    In Verbindung mit COMPUTE BY müssen Sie immer eine ORDER BY-Klausel verwenden. Die Ausdrücke müssen identisch mit den nach Ausführung von ORDER BY aufgeführten Spalten oder eine Teilmenge dieser Spalten sein und dieselbe Reihenfolge aufweisen. Wenn z. B. die ORDER BY-Klausel ORDER BY a, b, c lautet,treffen für die COMPUTE-Klausel eine oder alle der folgenden Aussagen zu:

    COMPUTE BY a, b, c
    COMPUTE BY a, b
    COMPUTE BY a
    
    HinweisHinweis

    In einer SELECT-Anweisung mit einer COMPUTE-Klausel hat die Reihenfolge der in der SELECT-Liste aufgeführten Spalten Vorrang vor der Reihenfolge der Aggregatfunktionen in der COMPUTE-Klausel. ODBC- und DB-Library-Programmierer müssen dies beachten, damit sich die Ergebnisse der Aggregatfunktion an der richtigen Stelle befinden.

Sie können COMPUTE nicht in einer SELECT INTO-Anweisung verwenden, da Anweisungen mit COMPUTE Tabellen generieren und ihre Ergebnisse nicht in der Datenbank gespeichert werden. Daher werden keine der von COMPUTE erstellten Berechnungen in der mit der SELECT INTO-Anweisung erstellten neuen Tabelle angezeigt.

Sie können die COMPUTE-Klausel nicht verwenden, wenn die SELECT-Anweisung Teil einer DECLARE CURSOR-Anweisung ist.

Beispiele

A. Verwenden von COMPUTE in einer Abfrage, um Summen zurückzugeben

Im folgenden Beispiel verwendet die SELECT-Anweisung eine einfache COMPUTE-Klausel, um ein Gesamtergebnis für die Summe von SubTotal und TotalDue aus der SalesOrderHeader-Tabelle zu erstellen.

USE AdventureWorks2008R2;
GO
SELECT CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
WHERE SalesPersonID = 35
ORDER BY OrderDate 
COMPUTE SUM(SubTotal), SUM(TotalDue);

B. Verwenden von COMPUTE in einer Abfrage, um Summen zurückzugeben

Im folgenden Beispiel verwendet die SELECT-Anweisung eine COMPUTE-Klausel, um Gesamtergebnisse pro Verkäufer für die Summe von SubTotal und TotalDue aus der SalesOrderHeader-Tabelle zu erstellen.

USE AdventureWorks2008R2;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate 
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;