- 11.09.2017
- 5 Minuten zum Lesen
-
- j
- c
- M
- m
- M
-
+8
Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL-Datenbank Verwaltete Azure SQL-Instanz Azure Synapse Analytics Paralleles Data Warehouse
Nummeriert die Ausgabe einer Ergebnismenge. Gibt insbesondere die fortlaufende Nummer einer Zeile innerhalb einer Partition einer Ergebnismenge zurück, beginnend bei 1 für die erste Zeile in jeder Partition.
Hinweis
ROW_NUMBER
ist ein temporärer Wert, der beim Ausführen der Abfrage berechnet wird. Informationen zum Beibehalten von Zahlen in einer Tabelle finden Sie unter IDENTITY-Eigenschaft und SEQUENCE.
Transact-SQL-Syntaxkonventionen
Syntax
Hinweis
Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 und früher finden Sie in der Dokumentation zu früheren Versionen.
Argumente
PARTITION BY value_expression
Teilt die von der FROM-Klausel erzeugte Ergebnismenge in Partitionen, auf die die Funktion ROW_NUMBER angewendet wird. value_expression gibt die Spalte an, nach der die Ergebnismenge partitioniert wird. Wenn PARTITION BY
nicht angegeben ist, behandelt die Funktion alle Zeilen der Abfrageergebnismenge als eine einzige Gruppe. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL).
order_by_clause
Die ORDER BY
-Klausel bestimmt die Reihenfolge, in der den Zeilen ihre eindeutige ROW_NUMBER
innerhalb einer angegebenen Partition. Es ist notwendig. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL).
Rückgabetypen
bigint
Allgemeine Hinweise
Es gibt keine Garantie dass die von einer Abfrage mit ROW_NUMBER()
zurückgegebenen Zeilen bei jeder Ausführung genau gleich geordnet werden, es sei denn, die folgenden Bedingungen sind erfüllt.
-
Werte der partitionierten Spalte sind eindeutig.
-
Die Werte der
ORDER BY
-Spalten sind eindeutig. -
Kombinationen von Werten der Partitionsspalte und der
ORDER BY
-Spalten sind eindeutig.
ROW_NUMBER()
ist nicht deterministisch. Weitere Informationen finden Sie unter Deterministische und nichtdeterministische Funktionen.
Beispiele
A. Einfache Beispiele
Die folgende Abfrage gibt die vier Systemtabellen in alphabetischer Reihenfolge zurück.
Hier ist die Ergebnismenge.
name | recovery_model_desc |
---|---|
master | EINFACH |
Modell | FULL |
msdb | EINFACH |
tempdb | EINFACH |
Zum Hinzufügen einer Zeilennummernspalte vor jeder Fügen Sie in einer Zeile eine Spalte mit der Funktion ROW_NUMBER
hinzu, in diesem Fall mit dem Namen Row#
. Sie müssen die Klausel ORDER BY
in die Klausel OVER
verschieben.
Hier ist die Ergebnismenge.
Zeile # | name | recovery_model_desc |
---|---|---|
1 | master | EINFACH |
2 | Modell | FULL |
3 | msdb | EINFACH |
4 | tempdb | EINFACH |
Hinzufügen einer PARTITION BY
-Klausel in der Spalte recovery_model_desc
startet die Nummerierung neu, wenn sich der Wert recovery_model_desc
ändert.
Hier ist die Ergebnismenge.
Zeile # | name | recovery_model_desc |
---|---|---|
1 | Modell | VOLL |
1 | Master | EINFACH |
2 | msdb | EINFACH |
3 | tempdb | EINFACH |
B. Rückgabe der Zeilennummer für Verkäufer
Im folgenden Beispiel wird eine Zeilennummer für die Verkäufer in Adventure Works Cycles basierend auf ihrem Verkaufsranking seit Jahresbeginn berechnet.
Hier ist die Ergebnismenge .
C.Rückgabe einer Teilmenge von Zeilen
Im folgenden Beispiel werden die Zeilennummern für alle Zeilen in der Tabelle SalesOrderHeader
in der Reihenfolge OrderDate
und gibt nur die Zeilen 50
an 60
einschließlich zurück.
D. Verwenden von ROW_NUMBER () mit PARTITION
Im folgenden Beispiel wird das Argument PARTITION BY
verwendet, um das in der Spalte TerritoryName
. Die in der OVER
-Klausel angegebene ORDER BY
-Klausel ordnet die Zeilen in jeder Partition nach der Spalte SalesYTD
. Die Klausel ORDER BY
in der Anweisung SELECT
ordnet das gesamte Abfrageergebnis an, das von TerritoryName
gesetzt wird.
Hier ist die Ergebnismenge.
Beispiele: Azure Synapse Analytics und Parallel Data Warehouse
E. Rückgabe der Zeilennummer für Vertriebsmitarbeiter
Im folgenden Beispiel wird die ROW_NUMBER
für Vertriebsmitarbeiter basierend auf dem zugewiesenen Vertriebskontingent zurückgegeben.
Hier ist ein Teilergebnismenge.
F. Verwenden von ROW_NUMBER () mit PARTITION
Das folgende Beispiel zeigt die Verwendung der Funktion ROW_NUMBER
mit dem Argument PARTITION BY
. Dies bewirkt, dass die Funktion ROW_NUMBER
die Zeilen in jeder Partition nummeriert.
Hier ist eine Teilergebnismenge.
Siehe auch
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)