COMPUTE (Transact-SQL)

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

トピック リンク アイコン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 キーワードは使用できません。

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

ms181708.note(ja-jp,SQL.90).gifメモ :
ODBC および DB-Library プログラムでオーバーフロー エラーが発生する可能性を低くするには、平均または合計の結果の変数を int 型で宣言してください。

expression

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

ms181708.note(ja-jp,SQL.90).gifメモ :
COMPUTE または COMPUTE BY 句に、データ型 ntexttext、または 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
ms181708.note(ja-jp,SQL.90).gifメモ :
COMPUTE 句を伴う SELECT ステートメントでは、COMPUTE 句の集計関数の順序よりも、選択リストの列の順序が優先されます。ODBC および DB-Library のプログラマは、集計関数の結果を正しい場所に置くために、この順序の規則を知っておく必要があります。

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

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

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

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

USE AdventureWorks;
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 というテーブルから SubTotalTotalDue の販売員ごとの合計を生成します。

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

参照

関連項目

SELECT (Transact-SQL)
ORDER BY 句 (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手