Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie erzeuge ich eine fortlaufende Zeilennummer in tsql?

Es besteht keine Notwendigkeit, analytische Funktionen zu vermeiden, wenn Ihre Datenbank sie unterstützt, z. B. ROW_NUMBER()

    SELECT
        ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
    FROM
        [<TABLE_NAME>]

Die Syntax ist Func([ arguments ]) OVER (analytic_clause) Sie müssen sich auf OVER () konzentrieren. Diese letzten Klammern erstellen Partition(en) Ihrer Zeilen und wenden Func() nacheinander auf diese Partitionen an. Im obigen Code haben wir nur einen einzelnen Satz/eine einzelne Partition von Zeilen. Daher gilt die generierte Sequenz für alle Zeilen.

Sie können mehrere Sätze Ihrer Daten erstellen und die Sequenznummer für jeden auf einmal generieren. Wenn Sie beispielsweise eine Sequenznummer für alle Zeilen generieren müssen, haben diese die gleiche categoryId. Sie müssen nur Partition By hinzufügen Klausel wie diese (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) .

Denken Sie daran, dass nach FROM Sie können auch einen weiteren zusätzlichen ORDER BY verwenden um Ihre Daten anders zu sortieren. Aber es hat keine Auswirkung auf das OVER ()