Share via


COMPUTE および COMPUTE BY を使用したデータの集約

COMPUTE および COMPUTE BY 句は、旧バージョンとの互換性を維持するためにサポートされています。代わりに、次のコンポーネントを使用してください。

COMPUTE BY 句を使用すると、1 つの SELECT ステートメントで詳細行とサマリ行を生成できます。サブグループのサマリ値、または結果セット全体のサマリ値を計算することも可能です。

COMPUTE 句では、以下の情報を指定します。

  • オプションの BY キーワード。列ごとに指定された行の集計が計算されます。

  • 行の集計関数の名前。SUM、AVG、MIN、MAX、または COUNT があります。

  • 行の集計関数の実行対象とする列。

COMPUTE により生成される結果セット

COMPUTE によって生成されるサマリ値は、クエリの結果セット内にそれぞれ別の結果セットとして表示されます。COMPUTE 句が含まれているクエリの結果は、コントロール ブレーク レポートのようになります。これは、指定したグループまたはブレークによって制御されるサマリ値を持つレポートです。各グループのサマリ値を生成することも、同じグループに対して複数の集計関数を使用した計算を実行することも可能です。

オプションの BY 句と共に COMPUTE を指定した場合、SELECT によって選択される各グループに対して次の 2 つの結果セットが生成されます。

  • 各グループに対応する最初の結果セットには、そのグループの選択リスト情報を格納した一連の詳細行が含まれます。

  • 各グループに対応する 2 つ目の結果セットには、そのグループに対する COMPUTE 句で指定された集計関数の小計を格納した 1 行が含まれます。

オプションの BY 句なしで COMPUTE を指定した場合、SELECT によって選択される各グループに対して次の 2 つの結果セットが生成されます。

  • 各グループに対する最初の結果セットには、選択リスト情報を格納したすべての詳細行が含まれます。

  • 各グループに対する 2 つ目の結果セットには、COMPUTE 句で指定された集計関数の総計を格納した 1 行が含まれます。

COMPUTE の使用例

次の SELECT ステートメントでは、単純な COMPUTE 句を使用して、SalesOrderDetail テーブルの単価および割引の総計を生成します。

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

次のクエリでは、オプションの BY キーワードを COMPUTE 句に追加し、各販売注文の小計を生成します。

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

この SELECT ステートメントの結果として、各販売注文に対する 2 つの結果セットが返されます。各販売注文に対する最初の結果セットには、選択リストで指定した情報を格納した一連の行があります。各販売注文に対する 2 つ目の結果セットには、COMPUTE 句に指定された 2 つの SUM 関数の小計が格納されます。

注意

osql などの一部のユーティリティでは、各小計が結果セット内で別個の行であるように、複数の小計または総計の集計サマリが表示されます。これはユーティリティの出力形式によるもので、小計または総計が 1 行で返されます。SQL Server Management Studio などの他のアプリケーションでは、複数の集計が同じ行に表示されます。

COMPUTE と GROUP BY の差異

次に、COMPUTE と GROUP BY の違いを示します。

  • GROUP BY は結果セットを 1 つだけ生成します。グループ化列とそのグループの小計を示す集計関数だけを含む行がグループごとに 1 つあります。選択リストには、グループ化列と集計関数だけを含めることができます。

  • COMPUTE は複数の結果セットを生成します。1 つは、グループごとに選択リストの式を含む詳細行の結果セットです。それ以外はグループごとの小計または SELECT ステートメントの総計を含む結果セットです。選択リストには、グループ化列や集計関数以外の式を含めることができます。集計関数は、選択リストではなく COMPUTE 句で指定します。

次のクエリは、GROUP BY と集計関数を使用しています。このクエリからは、グループごとに 1 行の結果セットが 1 つ返され、集計された小計を格納しています。

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

COMPUTE 句または COMPUTE BY 句に、ntext 型、text 型、または image 型を含めることはできません。

関連項目

参照

概念