RANK (Transact-SQL)
傳回結果集資料分割內,每個資料列的次序。資料列的次序是一加上相關資料列前面的次序數目。
語法
RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
引數
- < partition_by_clause >
將 FROM 子句所產生的結果集分成套用 RANK 函數的資料分割。如需 PARTITION BY 的語法,請參閱<OVER 子句 (Transact-SQL)>。
- < order_by_clause >
決定將 RANK 值套用於資料分割中之資料列的順序。如需詳細資訊,請參閱<ORDER BY 子句 (Transact-SQL)>。在次序函數中使用 <order_by_clause> 時,整數無法表示資料行。
傳回類型
bigint
備註
如果針對某個次序聯結了兩個或更多資料列,每個聯結的資料列都會收到相同的次序。例如,如果兩位超級業務員有相同的 SalesYTD 值,他們的次序便都是第一。SalesYTD 次高的業務員之次序便是第三,因為有兩個資料列次序比它高。因此,RANK 函數不一定會傳回連續整數。
整個查詢所用的排序順序決定了資料列在結果集中的出現順序。
範例
下列範例會根據庫存產品數量來排列庫存產品的次序。資料列集由 LocationID
來進行資料分割,依照 Quantity
來排序。請注意,OVER
子句中的 ORDER BY
會排列 RANK
的順序,而 SELECT
陳述式的 ORDER BY
會排列結果集的順序。
USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
,RANK() OVER
(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK'
FROM Production.ProductInventory i
INNER JOIN Production.Product p
ON i.ProductID = p.ProductID
ORDER BY p.Name;
GO
請參閱
參考
DENSE_RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
次序函數 (Transact-SQL)
函數 (Transact-SQL)