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都得到一個窗口。
窗口函數功能非常強大,建立起來也十分容易。你可以使用這個技巧立即搜索到大量統計值。這個教 程中的例子指出,你可以在單獨一個查詢中搜索任何統計值集合。