Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Aktualisiert: 17. Juli 2006
Gibt die fortlaufende Nummer einer Zeile innerhalb einer Partition eines Resultsets zurück, beginnend mit 1 für die erste Zeile in jeder Partition.
Transact-SQL-Syntaxkonventionen
Syntax
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
Argumente
- <partition_by_clause>
Teilt das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die ROW_NUMBER-Funktion angewendet wird. Informationen zur Syntax von PARTITION BY finden Sie unter OVER-Klausel (Transact-SQL).
- <order_by_clause>
Bestimmt die Reihenfolge, in der der ROW_NUMBER-Wert den Zeilen in einer Partition zugewiesen wird. 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
Die ORDER BY-Klausel bestimmt die Reihenfolge, in der den Zeilen die eindeutige ROW_NUMBER innerhalb einer angegebenen Partition zugewiesen wird.
Beispiele
Hinweis: |
|---|
ORDER BY in der OVER-Klausel sortiert ROW_NUMBER. Wenn Sie der SELECT-Anweisung, die nach einer Spalte (nach Spalten) anstelle von 'Row Number' the sortiert, eine ORDER BY-Klausel hinzufügen, wird das Resultset nach der äußeren ORDER BY-Klausel sortiert. |
Im folgenden Beispiel wird die ROW_NUMBER für die Vertriebsmitarbeiter in AdventureWorks basierend auf den Verkaufszahlen des laufenden Jahres zurückgegeben.
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
Im folgenden Beispiel werden Zeilen mit Zahlen zwischen 50 und 60 einschließlich in der Reihenfolge von OrderDate zurückgegeben.
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
Im folgenden Beispiel wird die Verwendung des PARTITION BY-Arguments dargestellt.
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName
,ROW_NUMBER() OVER
(PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Row Number'
,s.SalesYTD, a.PostalCode
FROM Sales.SalesPerson s
INNER JOIN Person.Contact c
ON s.SalesPersonID = c.ContactID
INNER JOIN Person.Address a
ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
Änderungsverlauf
| Version | Verlauf |
|---|---|
17. Juli 2006 |
|
Siehe auch
Verweis
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)
Rangfolgefunktionen (Transact-SQL)
Funktionen (Transact-SQL)
Hinweis: