深度探討SQL Server 2005 視窗函數

來源:互聯網
上載者:User

  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都得到一個視窗。

  視窗函數功能非常強大,建立起來也十分容易。你可以使用這個技巧立即搜尋到大量統計值。這個教程中的例子指出,你可以在單獨一個查詢中搜尋任何統計值集合。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.