ROW_NUMBER (Transact-SQL) (Deutsch)

  • 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.

  1. Werte der partitionierten Spalte sind eindeutig.

  2. Die Werte der ORDER BY -Spalten sind eindeutig.

  3. 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)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.