COMPUTE (Transact-SQL)

結果セットの最後に集計列として追加される総計を生成します。BY と共に使用すると、COMPUTE 句では結果セット内にコントロールブレークと小計を生成します。COMPUTE BY および COMPUTE は同じクエリに指定できます。

重要な注意事項重要

この機能は、Microsoft SQL Server の次のバージョンで削除されます。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。代わりに ROLLUP を使用してください。詳細については、「GROUP BY (Transact-SQL)」を参照してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文


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

引数

  • AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
    集計の実行を指定します。以下に COMPUTE 句と共に使用できる行集計関数を示します。

    行集計関数

    結果

    AVG

    数値式の値の平均

    COUNT

    選択された行の数

    MAX

    式の最大値

    MIN

    式の最小値

    STDEV

    式のすべての値の統計的標準偏差

    STDEVP

    式のすべての値の母集団の統計的標準偏差

    SUM

    数値式の値の合計

    VAR

    式のすべての値の統計的変位

    VARP

    式のすべての値の母集団に対する統計的変位

    COUNT(*) と等価なものはありません。GROUP BY 句および COUNT(*) によって生成される集計情報を取得するには、COMPUTE 句を BY なしで使ってください。

    これらの関数は、NULL 値を無視します。

    行集計関数を COMPUTE 句で指定した場合、DISTINCT キーワードは使用できません。

    SQL Server データベース エンジンでは、整数型のデータの加算または平均を求める場合は、その列のデータ型が smallint または tinyint のどちらでも、結果は int 値として扱われます。合計値または平均値の戻り値の型の詳細については、「SUM (Transact-SQL)」および「AVG (Transact-SQL)」を参照してください。

    注意

    ODBC および DB-Library プログラムでオーバーフロー エラーが発生する可能性を低くするには、平均または合計の結果の変数を int 型で宣言してください。

  • expression
    計算が実行される列の名前などを表す式 (Transact-SQL)です。expression は選択リストに含まれている必要があり、選択リスト内での指定と正確に一致している必要があります。expression 内では、選択リストに指定されている列の別名を使用できません。

    注意

    COMPUTE または COMPUTE BY 句に、データ型 ntext、text、または image を指定することはできません。

  • BY expression
    結果セット内にコントロールブレークと小計を生成します。expression は、関係付けられた ORDER BY 句内の order_by_expression と同一のコピーです。通常、これは列の名前または列の別名です。複数の式を指定できます。BY の後ろに複数の式を並べると、グループがサブグループに分割され、集計関数が各レベルのグループで適用されます。

    COMPUTE BY を使う場合は、ORDER BY 句も一緒に使う必要があります。式は、ORDER BY 句の後に並べる式と同一であるかそのサブセットであり、同じ順序で並んでいる必要があります。たとえば、ORDER BY 句が ORDER BY a, b, cの場合、COMPUTE 句は次のいずれか (またはすべて) です。

    COMPUTE BY a, b, c
    COMPUTE BY a, b
    COMPUTE BY a
    
    注意

    COMPUTE 句を伴う SELECT ステートメントでは、COMPUTE 句の集計関数の順序よりも、選択リストの列の順序が優先されます。ODBC および DB-Library のプログラマは、集計関数の結果を正しい場所に置くために、この順序の規則を知っておく必要があります。

SELECT INTO ステートメントの中で COMPUTE を使用することはできません。これは、COMPUTE を含むステートメントが生成するテーブルとその集計結果がデータベースに格納されないためです。したがって、COMPUTE で生成された計算処理は、SELECT INTO で作成された新しいテーブルには含まれません。

COMPUTE 句は、DECLARE CURSOR ステートメント内の SELECT ステートメントでは使用できません。

A. 合計を返すクエリで COMPUTE を使用する

次の例では、SELECT ステートメントで単純な COMPUTE 句を使用して、SalesOrderHeader というテーブルから SubTotal と TotalDue の各小計の総計を生成します。

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

B. 合計を返すクエリで COMPUTE を使用する

次の例では、SELECT ステートメントで COMPUTE 句を使用して、SalesOrderHeader というテーブルから SubTotal と TotalDue の販売員ごとの合計を生成します。

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