Freigeben über


RANK (Transact-SQL)

Gibt den Rang jeder Zeile innerhalb der Partition eines Resultsets zurück. Der Rang einer Zeile ergibt sich, indem 1 zur Anzahl von Rängen vor der fraglichen Zeile addiert wird.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

RANK ( )    OVER ( [ < partition_by_clause > ] < order_by_clause > )

Argumente

  • < partition_by_clause >
    Teilt das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die RANK-Funktion angewendet wird. Informationen zur Syntax von PARTITION BY finden Sie unter OVER-Klausel (Transact-SQL).

  • < order_by_clause >
    Bestimmt die Reihenfolge, in der die RANK-Werte auf die Zeilen in einer Partition angewendet werden. Weitere Informationen finden Sie unter ORDER BY-Klausel (Transact-SQL). Eine ganze Zahl kann keine Spalte darstellen, wenn < order_by_clause > in einer Rangfolgefunktion verwendet wird.

Rückgabetypen

bigint

Hinweise

Wenn zwei oder mehr Zeilen gleichwertig sind, erhält jede gleichwertige Zeile denselben Rang. Wenn beispielsweise zwei Vertriebsmitarbeiter denselben SalesYTD-Wert aufweisen, erhalten beide den Rang 1. Der Vertriebsmitarbeiter mit dem nächsthöheren SalesYTD-Wert erhält den Rang 3, da es bereits zwei Zeilen mit einem höheren Rang gibt. Aus diesem Grund gibt die RANK-Funktion nicht immer aufeinander folgende ganze Zahlen zurück.

Die Sortierreihenfolge, die für die ganze Abfrage verwendet wird, bestimmt die Reihenfolge, mit der die Zeilen in einem Resultset aufgeführt sind.

Beispiele

Im folgenden Beispiel wird die Rangfolge der Produkte im Bestand gemäß ihren Mengen bestimmt. Das Rowset wird auf der Grundlage von LocationID partitioniert und nach Quantity sortiert. Beachten Sie, dass ORDER BY in der OVER-Klausel RANK sortiert und dass ORDER BY der SELECT-Anweisung das Resultset sortiert.

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