排名函數是SQL Server2005新加的功能。在SQL Server2005中有如下四個排名函數:
1.row_number
2.rank
3.dense_rank
4.ntile
下面分別介紹一下這四個排名函數的功能及用法。在介紹之前假設有一個t_table表,表結構與表中的數據如圖1所示:
圖1
其中field1字段的類型是int,field2字段的類型是varchar
一、row_number
row_number函數的用途是非常廣泛,這個函數的功能是為查詢出來的每一行記錄生成一個序號。row_number函數的用法如下面的SQL語句所示:
selectrow_number()over(orderbyfield1)asrow_number,*fromt_table
上面的SQL語句的查詢結果如圖2所示。
圖2
其中row_number列是由row_number函數生成的序號列。在使用row_number函數是要使用over子句選擇對某一列進行排序,然後才能生成序號。
實際上,row_number函數生成序號的基本原理是先使用over子句中的排序語句對記錄進行排序,然後按著這個順序生成序號。over子句中的order by子句與SQL語句中的order by子句沒有任何關系,這兩處的order by 可以完全不同,如下面的SQL語句所示: