簡(jiǎn)介

    Over子句在SQLServer 2005中回歸,并且在2012中得到了擴(kuò)展。這個(gè)功能主要結(jié)合窗口函數(shù)來(lái)使用;也可以在序列函數(shù)“NEXT VALUE FOR”使用。OVER子句確定哪些來(lái)自查詢(xún)的列被應(yīng)用到函數(shù)中,在函數(shù)中這些列被如何排序,并且何時(shí)重啟函數(shù)計(jì)算。由于篇幅限制,本篇僅僅就OVER子句討論,不再深入各種函數(shù)了(提供幾個(gè)2014中新增的函數(shù))。

語(yǔ)法:

<function> OVER (        [PARTITION BY clause]
                         [ORDER BY clause]
                         [ROWS or RANGE clause])

 

    這個(gè)語(yǔ)法中,顯示所有的子句都是可選的,實(shí)際上,每個(gè)函數(shù)使用OVER子句的函數(shù)都能確定哪個(gè)子句被允許哪個(gè)被需要。下圖是展示那些函數(shù)是允許或者需要的:

DB樂(lè)之者

R-需要, O-可選, X-不允許

 

PARTITION BY子句用來(lái)區(qū)分查詢(xún)結(jié)果集到數(shù)據(jù)子集中,或者分區(qū)。如果不使用PARTITION BY子句,整個(gè)來(lái)自查詢(xún)的結(jié)果集都將被使用。窗口函數(shù)被應(yīng)用到每個(gè)獨(dú)立的分區(qū)數(shù)據(jù),并且每個(gè)函數(shù)對(duì)于每個(gè)分區(qū)都是重新運(yùn)算。通過(guò)定義一套確定分區(qū)的值來(lái)區(qū)分查詢(xún)到子集,這些值可以使列,標(biāo)量函數(shù),子查詢(xún)或者變量

舉例如下:

SELECT  COUNT(*)
FROM    [msdb].sys.indexes;

查詢(xún)結(jié)果如下:

2