SQL Server獲得排名或排序的函數有如下幾種: 1、Rank():在結果集中每一條記錄所在的排名位置,但排名可能不連續,例如:若同一組內有兩個第一名,則該組內下一個名次直接跳至第三名 select *,Rank() over (partition by modifieddate order b ...
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組,並給予每組一個組編號,分組的方式很簡單,將結果集的總記錄數除以N,若有餘數M,則前M組都多增一條記錄,因此,並非所有的組都有相同的記錄數,但多記錄的組最多只有一條記錄。
select top 13 *,NTILE(2) over (partition by productid order by locationid ) as Rank from Production.ProductInventory
上述四個函數語法格式相同,都要搭配OVER子句,而且要以指定切分或排序記錄的方式,OVER子句定議格式如下:
Over(【Partition BY <提供數值的描述方式>】 ORDER BY <欄位> [DES|ASC])
Partition BY 子句決定排名記錄的分組方式,而Order By 子句決定每一組記錄要如何排序,如果省略了Partition by 子句,則全部記錄為一組