Share via


Zusammenfassen von Daten mit COMPUTE und COMPUTE BY

Die COMPUTE- und COMPUTE BY-Klauseln werden zur Unterstützung der Abwärtskompatibilität bereitgestellt. Verwenden Sie stattdessen die folgenden Komponenten:

Die COMPUTE BY-Klausel ermöglicht es, sowohl Detail- als auch Zusammenfassungszeilen mit einer einzelnen SELECT-Anweisung anzuzeigen. Sie können zusammenfassende Werte für Untergruppen oder einen zusammenfassenden Wert für das gesamte Resultset berechnen.

In der COMPUTE-Klausel können folgende Informationen angegeben werden:

  • Das optionale BY-Schlüsselwort. Dieses berechnet das angegebene Zeilenaggregat spaltenweise.

  • Der Name einer Zeilenaggregatfunktion. Dies schließt SUM, AVG, MIN, MAX oder COUNT ein.

  • Eine Spalte, auf die die Zeilenaggregatfunktion angewendet werden soll.

Von COMPUTE generierte Resultsets

Die von COMPUTE generierten zusammenfassenden Werte werden als separate Resultsets in den Abfrageergebnissen angezeigt. Die Ergebnisse einer Abfrage, die eine COMPUTE-Klausel enthalten, ähneln einem Bericht mit Gruppenwechsel. Dies ist ein Bericht, dessen zusammenfassende Werte durch die Gruppierungen oder Wechsel gesteuert werden, die Sie angeben. Sie können zusammenfassende Werte für Gruppen erstellen und für die gleiche Gruppe mehrere Aggregatfunktionen berechnen.

Wenn COMPUTE mit der optionalen BY-Klausel angegeben wird, gibt es zwei Resultsets für jede Gruppe, die die SELECT-Anweisung kennzeichnet:

  • Das erste Resultset für jede Gruppe enthält die Detailzeilen mit den Informationen gemäß der Auswahlliste für die betreffende Gruppe.

  • Das zweite Resultset für jede Gruppe enthält eine Zeile mit den Teilergebnissen der Aggregatfunktionen, die in der COMPUTE-Klausel für die betreffende Gruppe angegeben sind.

Wenn COMPUTE ohne die optionale BY-Klausel angegeben ist, gibt es zwei Resultsets für die SELECT-Anweisung:

  • Das erste Resultset für jede Gruppe enthält alle Detailzeilen mit den Informationen gemäß der Auswahlliste.

  • Das zweite Resultset enthält eine einzelne Zeile mit den Gesamtwerten der Aggregatfunktionen, die in der COMPUTE-Klausel angegeben sind.

Beispiele für das Verwenden von COMPUTE

Die folgende SELECT-Anweisung verwendet eine einfache COMPUTE-Klausel, um das Gesamtergebnis für die Einheitspreise und Rabatte aus der SalesOrderDetail-Tabelle zu erstellen:

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount);

In der folgenden Abfrage wird das optionale BY-Schlüsselwort zur COMPUTE-Klausel hinzugefügt, damit Teilergebnisse für jeden Kaufauftrag erstellt werden:

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount) BY SalesOrderID;

Die Ergebnisse dieser SELECT-Anweisung geben zwei Resultsets für jeden Kaufauftrag zurück. Das erste Resultset für jeden Kaufauftrag enthält Zeilen mit den in der Auswahlliste angegebenen Informationen. Das zweite Resultset für jeden Kaufauftrag enthält die Teilergebnisse der beiden SUM-Funktionen in der COMPUTE-Klausel.

HinweisHinweis

Einige Hilfsprogramme (z. B. osql) zeigen mehrere Zusammenfassungen in Form von Teilergebnis- oder Gesamtwertaggregaten so an, als wäre jedes Teilergebnis eine separate Zeile in einem Resultset. Dies hängt mit der Formatierung der Ausgabe durch das Hilfsprogramm zusammen; die Teilergebnis- oder Gesamtwertaggregate werden jeweils in einer einzelnen Zeile zurückgegeben. Andere Anwendungen, wie z. B. SQL Server Management Studio, formatieren mehrere Aggregate in derselben Zeile.

Vergleich zwischen COMPUTE und GROUP BY

Im Folgenden finden Sie eine Zusammenfassung der Unterschiede zwischen COMPUTE und GROUP BY:

  • GROUP BY erstellt ein einzelnes Resultset. Es enthält eine Zeile für jede Gruppe, die nur die Gruppierungspalten und die Aggregatfunktionen enthält, die das Teilaggregat für die betreffende Gruppe anzeigen. Die Auswahlliste kann nur die Gruppierungsspalten und Aggregatfunktionen enthalten.

  • COMPUTE erzeugt mehrere Resultsets. Eine Art von Resultset enthält die Detailzeilen für jede Gruppe mit den Ausdrücken aus der Auswahlliste. Die andere Art von Resultset enthält das Teilaggregat für eine Gruppe oder das Gesamtwertaggregat für die SELECT-Anweisung. Die Auswahlliste kann neben Gruppierungspalten oder Aggregatfunktionen auch andere Ausdrücke enthalten. Die Aggregatfunktionen werden in der COMPUTE-Klausel, nicht in der Auswahlliste angegeben.

Die folgende Abfrage verwendet GROUP BY und Aggregatfunktionen. Die Abfrage gibt ein einzelnes Resultset zurück, das eine Zeile pro Gruppe mit den Aggregatteilergebnissen für die betreffende Gruppe enthält:

USE AdventureWorks2008R2;
GO
SELECT SalesOrderID, SUM(UnitPrice), SUM(UnitPriceDiscount)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID;
HinweisHinweis

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