使用 COMPUTE 與 COMPUTE BY 來摘要資料

COMPUTE 與 COMPUTE BY 子句是為了回溯相容性 (Backward Compatibility) 而提供的。不過,您可使用下列元件來取代:

COMPUTE BY 子句可讓您以一個 SELECT 陳述式同時檢視詳細與摘要資料列。您可以計算子群組的摘要值,或是整個結果集的摘要值。

COMPUTE 子句將採用下列資訊:

  • 選擇性的 BY 關鍵字。這可計算每個資料行的指定資料列彙總。
  • 資料列彙總函數名稱。這包含 SUM、AVG、MIN、MAX 或 COUNT。
  • 用來執行資料列彙總函數的資料行。

COMPUTE 所產生的結果集

COMPUTE 產生的摘要數值將顯示成查詢結果中的個別結果集。包含 COMPUTE 子句的查詢結果就像控制分頁報告。這個報告的摘要值是由您所指定的群組或分頁來控制。您可以為群組產生摘要值,也可以為同一個群組計算多個彙總函數 (Aggregate Function)。

若在指定 COMPUTE 時加上選擇性的 BY 子句,符合 SELECT 的每個群組都有兩個結果集:

  • 每個群組的第一個結果集擁有包含該群組之選取清單資訊的詳細資料列集合。
  • 每個群組的第二個結果集擁有一個資料列,裡面包含了指定於該群組之 COMPUTE 子句的彙總函數小計。

如果指定 COMPUTE 時並沒有包含選擇性的 BY 子句,SELECT 將有兩個結果集:

  • 每個群組的第一個結果集擁有包含選定清單資訊的所有詳細資料列。
  • 第二個結果集則擁有一個資料列,裡面包含了指定於 COMPUTE 子句的彙總函數總計。

使用 COMPUTE 的範例

下列 SELECT 陳述式使用了一個簡單的 COMPUTE 子句來產生 SalesOrderDetail 資料表之單價與折扣的總計:

USE AdventureWorks
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount)

下列查詢將選擇性的 BY 關鍵字加至 COMPUTE 子句,以產生每個銷售訂單的小計:

USE AdventureWorks
SELECT SalesOrderID, UnitPrice, UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID
COMPUTE SUM(UnitPrice), SUM(UnitPriceDiscount) BY SalesOrderID

SELECT 陳述式的結果會傳回每個銷售訂單的兩個結果集。每個銷售訂單的第一個結果集都擁有一組資料列,裡面包含了選取清單所指定的資訊。每個銷售訂單的第二個結果集包含了 COMPUTE 子句中的兩個 SUM 函數的小計。

ms190452.note(zh-tw,SQL.90).gif附註:
在某些公用程式中,例如 osql,多個小計或總彙總摘要的顯示方式就好像每個小計都是結果集中的獨立資料列。這是因為公用程式格式化輸出的方式;小計或總彙總是以一個資料列傳回。其他的應用程式,例如 SQL Server Management Studio,會在同一行格式化多個彙總。

比較 COMPUTE 與 GROUP BY

下列摘要 COMPUTE 與 GROUP BY 的差異:

  • GROUP BY 可產生一個結果集。每個群組都有一個資料列,裡面只包含群組資料行與彙總函數,顯示出該群組的子彙總 (Subaggregate)。選取清單只包含群組資料行與彙總函數。
  • COMPUTE 可產生多個結果集。一種結果集包含了每個群組的詳細資料列,裡面包含了選取清單的運算式。其他類型的結果集則包含群組的子彙總,也就是 SELECT 陳述式的總數彙總。選取清單可包含群組資料行或彙總函數除外的運算式。彙總函數將指定於 COMPUTE 子句中,而非選取清單中。

下列查詢使用 GROUP BY 以及彙總函數。此查詢傳回一個結果集,其中每個群組有一個資料列,裡面包含了該群組的彙總小計:

USE AdventureWorks
SELECT SalesOrderID, SUM(UnitPrice), SUM(UnitPriceDiscount)
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ms190452.note(zh-tw,SQL.90).gif附註:
您不能將 ntexttextimage 資料類型包含於 COMPUTE 或 COMPUTE BY 子句中。

請參閱

概念

查詢基本原理

其他資源

SELECT (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助