selectdense_rank()over(orderbyfield1),*fromt_tableorderbyfield1
上面的SQL語句的查詢結果如圖8所示。

圖8
讀者可以比較圖7和圖8所示的查詢結果有什么不同
四、ntile
ntile函數可以對序號進行分組處理。這就相當于將查詢出來的記錄集放到指定長度的數組中,每一個數組元素存放一定數量的記錄。ntile函數為每條記錄生成的序號就是這條記錄所有的數組元素的索引(從1開始)。也可以將每一個分配記錄的數組元素稱為“桶”。ntile函數有一個參數,用來指定桶數。下面的SQL語句使用ntile函數對t_table表進行了裝桶處理:
selectntile(4)over(orderbyfield1)asbucket,*fromt_table
上面的SQL語句的查詢結果如圖9所示。

圖9
由于t_table表的記錄總數是6,而上面的SQL語句中的ntile函數指定了桶數為4。
也許有的讀者會問這么一個問題,SQL Server2005怎么來決定某一桶應該放多少記錄呢?可能t_table表中的記錄數有些少,那么我們假設t_table表中有59條記錄,而桶數是5,那么每一桶應放多少記錄呢?
實際上通過兩個約定就可以產生一個算法來決定哪一個桶應放多少記錄,這兩個約定如下:
1.編號小的桶放的記錄不能小于編號大的桶。也就是說,第1捅中的記錄數只能大于等于第2桶及以后的各桶中的記錄。