標籤:over partition modified 函數 des tin class rac top
SQL Server獲得排名或排序的函數有例如以下幾種:1、Rank:在結果集中每一條記錄所在的排名位置,但排名可能不連續,比如:若同一組內有兩個第一名,則該組內下一個名次直接跳至第三名
select *,Rank() over (partition by modifieddate order by locationid ) as Rank from Production.ProductInventory
2、Dense_Rank:功能與Rank相似。但排名的數值是連續的,比如:若同一組內有兩個第一名,則該組內下一個名次為第二名
select *,dense_Rank() over (partition by modifieddate order by locationid ) as Rank from Production.ProductInventory
3、Row_Number:依據組顯示每一條記錄在該組中出現的位置,比如:若有兩個第一名。則這兩個第一名在一組內排名為1、2,下一組的排序仍從1開始,依次類推
select *,row_number() over (partition by productid order by productid ) as Rank from Production.ProductInventory
4、NTILE:依據指定的分組數量將結果集分區,並記錄其在組中的位置。
能夠對結果集的資料排序後。依照指定的數量把結果集分成N組,並給予每組一個組編號,分組的方式非常easy,將結果集的總記錄數除以N,若有餘數M,則前M組都多增一條記錄,因此,並不是全部的組都有同樣的記錄數。但多記錄的組最多僅僅有一條記錄。
select top 13 *,NTILE(2) over (partition by productid order by locationid ) as Rank from Production.ProductInventory
以上SQL語句均在SQL Server 2008下調試通過。使用AdventureWorks
上述四個函數文法格式同樣,都要搭配OVER子句,並且要以指定切分或排序記錄的方式,OVER子句定議格式例如以下:Over(【Partition BY <提供數值的描寫敘述方式>】 ORDER BY <欄位> [DES|ASC])Partition BY 子句決定排名記錄的分組方式,而Order By 子句決定每一組記錄要怎樣排序,假設省略了Partition by 子句,則所有記錄為一組
SQL Server排名或排序的函數