COMPUTE (Transact-SQL)

產生在結果集結尾顯示為其他摘要資料行的總計。當搭配 BY 使用時,COMPUTE 子句會在結果集中產生 control-break 和小計。您可以在相同查詢中,指定 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(*) 所產生的摘要資訊,請使用不含 BY 的 COMPUTE 子句。

    這些函數會忽略 Null 值。

    當利用 COMPUTE 子句來指定資料列彙總函式時,不允許使用 DISTINCT 關鍵字。

    當您加入或平均整數資料時,SQL Server 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 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;