簡介
Over子句在SQLServer 2005中回歸,并且在2012中得到了擴(kuò)展。這個功能主要結(jié)合窗口函數(shù)來使用;也可以在序列函數(shù)“NEXT VALUE FOR”使用。OVER子句確定哪些來自查詢的列被應(yīng)用到函數(shù)中,在函數(shù)中這些列被如何排序,并且何時重啟函數(shù)計(jì)算。由于篇幅限制,本篇僅僅就OVER子句討論,不再深入各種函數(shù)了(提供幾個2014中新增的函數(shù))。
語法:
<function> OVER ( [PARTITION BY clause] [ORDER BY clause] [ROWS or RANGE clause])
這個語法中,顯示所有的子句都是可選的,實(shí)際上,每個函數(shù)使用OVER子句的函數(shù)都能確定哪個子句被允許哪個被需要。下圖是展示那些函數(shù)是允許或者需要的:
R-需要, O-可選, X-不允許
PARTITION BY子句用來區(qū)分查詢結(jié)果集到數(shù)據(jù)子集中,或者分區(qū)。如果不使用PARTITION BY子句,整個來自查詢的結(jié)果集都將被使用。窗口函數(shù)被應(yīng)用到每個獨(dú)立的分區(qū)數(shù)據(jù),并且每個函數(shù)對于每個分區(qū)都是重新運(yùn)算。通過定義一套確定分區(qū)的值來區(qū)分查詢到子集,這些值可以使列,標(biāo)量函數(shù),子查詢或者變量
舉例如下:
SELECT COUNT(*) FROM [msdb].sys.indexes;