Numeracja wierszy w SQL Server – ROW_NUMBER

Czasami wykonując zapytania T-SQL potrzebujemy ponumerować wiersze. Baza SQL Server dostarcza nam kilka różnych funkcji.

Podstawową funkcją jest ROW_NUMBER, która zwraca dla danego zbioru wartości od 1 do n. W przypadku gdy dwa zwrócone wiersze zawierają identyczne dane, ROW_NUMBER traktuje je jako różne i nadaje im kolejne numery. Przykład:

select ROW_NUMBER() over(order BY NAME),ProductSubcategoryID from Production.Product;

W klauzuli over określa się m.in. sortowanie. Za pomocą tego ROW_NUMBER wie, jaka wartość jest tak  naprawdę pierwsza w zbiorze.

Można również rozbić zbiór na kilka podzbiorów za pomocą PATRITION BY:

select ROW_NUMBER() over(PARTITION BY ProductSubcategoryID order BY NAME ),ProductSubcategoryID from Production.Product;

W tej chwili wiersze o różnych ProductSubcategoryID będą numerowane osobno. Wynik będzie zatem wyglądać mniej więcej tak:

 

ROW_NUMBER ProductSubcategoryID
1 1
2 1
3 1
4 1
1 2
2 2
3 2
1 5
2 5
3 5

 

W następnym poście zajmiemy się funkcją RANK.

3 thoughts on “Numeracja wierszy w SQL Server – ROW_NUMBER”

  1. Witam! Tego szukałem!
    Potrzebuję jeszcze tak “pogrupowane” rekordy podzielić na “paczki” po 99 sztuk … da się?

Leave a Reply

Your email address will not be published.