COMPUTE (Transact-SQL)
結果セットの最後に集計列として追加される総計を生成します。BY と共に使用すると、COMPUTE 句では結果セット内にコントロールブレークと小計を生成します。COMPUTE BY および COMPUTE は同じクエリに指定できます。
重要 |
---|
この機能は、Microsoft SQL Server の次のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。代わりに ROLLUP を使用してください。詳細については、「GROUP BY (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 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 というテーブルから SubTotal と TotalDue の販売員ごとの合計を生成します。
USE AdventureWorks;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;