SQL Server 2005中的視窗函數(window function)與微軟Windows無關;相反,它們建立資料視窗。視窗函數協助你迅速查看不同層級的彙總,通過它可以非常方便地恢複累計總數、移動平均值、以及執行其它計算。
一個SQL Server視窗是對函數應用的行的分區。你使用OVER(…)子句指定一個視窗,你可以對任何一個彙總函式應用這個子句。通常來說,你把資料分成幾個組,但OVER()的自變數可選。
USE AdventureWorks2;
GO
SELECT SalesOrderID, ProductID,
OrderQty AS 'Item Qty',SUM(OrderQty)
OVER(PARTITION BY SalesOrderID) AS 'Total Qty',
AVG(OrderQty) OVER(PARTITION BY SalesOrderID)
AS 'Average Qty',
COUNT(OrderQty) OVER(PARTITION BY SalesOrderID)
AS 'Total Count',
MIN(OrderQty) OVER(PARTITION BY SalesOrderID)
AS 'Minimum Count',
MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS
'Maximum Count',LineTotal,
AVG(LineTotal) OVER(PARTITION BY SalesOrderID) AS
'Average Amount',
SUM(LineTotal) OVER(PARTITION BY SalesOrderID) AS
'Total Amount',(LineTotal/SUM(LineTotal)
OVER(PARTITION BY SalesOrderID)) * 100 AS
'Percent'FROM Sales.SalesOrderDetail WHERE
SalesOrderID = 43664ORDER BY ProductID
GO
列表A
列表B
列表A說明如何一次搜集幾個聚集,甚至根據彙總進行其它計算。這樣就可得到列表B中的結果集。我把結果集限定為一個單獨的OrderID,那麼查詢將只產生一個視窗。你可以用各種方式修改子句,如使用一個IN()子句列出一組特殊的順序,或使用一個BETWEEN子句推導一個順序範圍內的統計值。最後你指定的每個OrderID都得到一個視窗。
視窗函數功能非常強大,建立起來也十分容易。你可以使用這個技巧立即搜尋到大量統計值。這個教程中的例子指出,你可以在單獨一個查詢中搜尋任何統計值集合。