Как назначить порядковый номер каждой строке в SQL Server?
Функция 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;
Выход: