COMPUTE (Transact-SQL)
產生在結果集結尾顯示為其他摘要資料行的總計。當搭配 BY 使用時,COMPUTE 子句會在結果集中產生 control-break 和小計。您可以在相同查詢中,指定 COMPUTE BY 和 COMPUTE。
語法
[ 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(*) 所產生的摘要資訊,請使用不含 BY 的 COMPUTE 子句。
這些函數會忽略 Null 值。
當利用 COMPUTE 子句來指定資料列彙總函數時,不允許使用 DISTINCT 關鍵字。
當您加入或平均整數資料時,Microsoft SQL Server 2005 Database Engine 會將結果當作 int 值來處理,即使資料行的資料類型是 smallint 或 tinyint,也是如此。如需有關加入或平均資料之傳回類型的詳細資訊,請參閱<SUM (Transact-SQL)>和<AVG (Transact-SQL)>。
附註: |
---|
若要減少 ODBC 和 DB-Library 程式發生溢位錯誤的機會,請使平均或總和結果的所有變數宣告都成為 int 資料類型。 |
expression
執行的計算所針對的資料行名稱之類的 運算式 (Transact-SQL)。expression 必須出現在選取清單中,且必須指定成與選取清單中的某個運算式相同。在 expression 內,不能使用選取清單所指定的資料行別名。
附註: |
---|
在 COMPUTE 或 COMPUTE BY 子句中,不能指定 ntext、text 或 image 資料類型。 |
BY expression
在結果集中,產生 control-break 和小計。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 陳述式所建立的新資料表中。
當 SELECT 陳述式是 DECLARE CURSOR 陳述式的一部份時,您無法使用 COMPUTE 子句。
範例
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;
請參閱
參考
SELECT (Transact-SQL)
ORDER BY 子句 (Transact-SQL)