1. 程式人生 > >SQL Server排名或排序的函數

SQL Server排名或排序的函數

order by 余數 分區 cat 並且 全部 src 記錄 例如

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排名或排序的函數