Как назначить порядковый номер каждой строке в SQL Server?

Опубликовано: 7 Января, 2023

Функция ROW_NUMBER() — это тип оконной функции, которую можно использовать в SQL Server для присвоения последовательного номера каждой строке в разделе результирующего набора. Строка начинается с номера 1 для первой строки в каждом разделе. Это чувствительно к порядку.

Синтаксис:

SELECT
ROW_NUMBER() OVER 
(
[PARTITION BY partition_value]
ORDER BY sort_value [ASC | DESC] 
)
FROM tablename ;

Где:

  • PARTITION BY: Предложение PARTITION BY является необязательным, оно разделяет результирующий набор на другой терм для групп строк.
  • ORDER BY: Предложение ORDER BY является обязательным, оно определяет логический порядок строк в каждом разделе результирующего набора.

Например, давайте воспользуемся приведенным ниже запросом, чтобы получить четыре системные таблицы в алфавитном порядке, и добавим столбец с функцией ROW_NUMBER с именем RowNum.

SELECT  
ROW_NUMBER() OVER(ORDER BY name ASC) 
AS RowNum,
name, recovery_model_desc
FROM sys.databases  
WHERE database_id < 5;

Выход:

Используя предложение PARTITION BY в recovery_model_desc:

SELECT  
ROW_NUMBER() OVER(PARTITION BY 
recovery_model_desc ORDER BY name ASC)  
AS RowNum,
name, recovery_model_desc
FROM sys.databases WHERE database_id < 5;

Выход:

В приведенном ниже примере мы использовали функцию ROW_NUMBER() для присвоения порядкового номера каждому имени. Он переинициализирует номер при изменении города:

Шаг 1: Создайте базу данных. Для этого используйте приведенную ниже команду, чтобы создать базу данных с именем GeeksForGeeks.

Запрос:

CREATE DATABASE GeeksForGeeks

Выход:

Шаг 2: Используйте базу данных GeeksForGeeks. Для этого используйте приведенную ниже команду.

Запрос:

USE GeeksForGeeks

Выход:

Шаг 3: Создайте таблицу «geek_tab» внутри базы данных GeeksForGeeks. Эта таблица имеет 3 столбца, а именно имя, идентификатор и город, содержащие имена, идентификатор и город.

Запрос:

CREATE TABLE geek_tab(
Name VARCHAR(20),
ID INT,
City VARCHAR(20));

Выход:

Шаг 4: Вставьте несколько строк в таблицу «geek_tab».

Запрос:

INSERT INTO geek_tab VALUES("Megha",12,"Delhi");
INSERT INTO geek_tab VALUES("Neha",31,"Noida");
INSERT INTO geek_tab VALUES("Komal",45,"Delhi");
INSERT INTO geek_tab VALUES("Nisha",54,"Noida");
INSERT INTO geek_tab VALUES("Hema",43,"Gurugram");
INSERT INTO geek_tab VALUES("Khushi",65,"Noida");
INSERT INTO geek_tab VALUES("Kajal",62,"Gurugram");
INSERT INTO geek_tab VALUES("Babita",48,"Delhi");
INSERT INTO geek_tab VALUES("Gita",52,"Noida");

Шаг 6: Отобразите все строки таблицы.

Запрос:

Select * from [geek_tab] ;

Выход:

Шаг 7: Теперь мы будем использовать функцию ROW_NUMBER(), чтобы присвоить порядковый номер каждому имени. Он повторно инициализирует номер при изменении города:

Запрос:

SELECT  Name,  ID, City,
ROW_NUMBER() OVER (
   PARTITION BY City
   ORDER BY Name
) AS Row_num
FROM  [geek_tab]
ORDER BY  City;

Выход:

SQL