ROW_NUMBER()

by Admin 13. Mai 2009 20:37

Mit Hilfe von ROW_NUMBER() lassen sich tolle Sachen machen. Die einfachste Anwendung ist die Nummerierung von Datensätzen nach einer festgelegten Sortierreihenfolge.

Ein kleines Beispiel:

Wir haben die Tabelle tBirthdates mit den Geburtsdaten einiger Leute.

CREATE TABLE tBirthdates
(  
Name VARCHAR(50),
Gender bit, -- 0 = male, 1 = female
Birthdate DATETIME
)
GO
INSERT INTO tBirthdates VALUES ('Peter', 0, '19800502')
INSERT INTO tBirthdates VALUES ('Mary', 1, '19810603')
INSERT INTO tBirthdates VALUES ('Hans', 0, '19840830')
INSERT INTO tBirthdates VALUES ('Pedro', 0, '19720502')
INSERT INTO tBirthdates VALUES ('Mario', 0, '19651002')
INSERT INTO tBirthdates VALUES ('Maria', 1, '19850221')
INSERT INTO tBirthdates VALUES ('Lena', 1, '19601231')
GO

Um nun die Geburtstage aller sortiert nach dem Datum zu nummerieren folgendes SQL-Statement:

SELECT Reihenfolge = ROW_NUMBER() OVER (ORDER BY Birthdate)
,*
FROM tBirthdates       

Gibt als Ergebnis die durchnummerierte Reihenfolge des Geburtsdatums.

Row_number_1

Zur Erläuterung: ROW_NUMBER() benötigt immer eine Sortierreihenfolge in der OVER Klausel um entscheiden zu können, wo die Zählung anfängt und wo sie aufhört. Doch ROW_NUMBER() kann noch mehr. Möchte man die Geburtsdaten durchnummeriert nach Geschlecht hilft folgendes SQL-Statement:

SELECT Reihenfolge = ROW_NUMBER() OVER (PARTITION BY Gender ORDER BY Birthdate)
,*
FROM tBirthdates       

Hier wird in der OVER Klausel nach Gender, also dem Geschlecht partitioniert. Das kann man sich vorstellen wie eine Gruppierung. ROW_NUMBER() zählt die Einträge pro Gruppe durch (wieder sortiert nach dem Geburtsdatum). Ergebnis siehe Screenshot.

Row_number_2

Das ist es im Grunde auch schon. Mehr Informationen gibt es u.a. hier: http://msdn.microsoft.com/de-de/library/ms186734.aspx

Tags:

SQLServer

Kommentare sind geschlossen

Herzlich Willkommen

Herzlich Willkommen im SQL Server & ASP .NET Blog. Hier findet Ihr allerlei Nützliches und Hilfreiches...