logo

Номер рядка SQL Server

Номер рядка є найпоширенішим функція ранжирування використовується в SQL Server. Функція ROW_NUMBER(). генерує порядковий номер для кожного рядка в розділі у результуючому виході. У кожному розділі номер першого рядка починається з 1. Ми завжди повинні використовувати СОРТУВАТИ ЗА щоб переконатися, що номери призначаються в правильній послідовності. Значення, які повертає ця функція, дорівнюють ВЕЛИКИЙ ІНТ тип даних. Ця функція постачається з SQL Server 2005 і новішими версіями MS SQL.

ROW_NUMBER визначає тимчасове значення коли запит виконується. Якщо ви хочете отримати числа в таблиці, вам потрібно переглянути ІДЕНТИЧНІСТЬ власність і ПОСЛІДОВНІСТЬ . Коли функція ROW_NUMBER у SQL Server зустрічає два ідентичні значення в одному розділі, вона призначає їм різні номери рангу. Номер рангу визначатиметься порядком, у якому вони відображаються.

Немає гарантії, що значення, яке повертає ця функція, буде однаково впорядковане для кожного виконання, якщо не виконується таке:

  • Значення розділених стовпців є унікальними
  • Значення стовпців ORDER BY є унікальними
  • Комбінація стовпців «Поділ» і «Порядок за» є унікальною

Синтаксис

Нижче наведено синтаксис, який ілюструє функцію ROW_NUMBER():

 ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... ) 

Давайте розберемося з синтаксисом функції ROW NUMBER():

ЗАВЕРШЕНО

Важливо розуміти це положення, яке визначає вікно або набір рядків, якими оперує віконна функція. PARTITION BY і ORDER BY є двома можливими реченнями речення OVER. Вираз ORDER BY пропозиції OVER підтримується, коли для виконання функції рядки мають бути в певному порядку.

спробуйте зловити спіймати java

РОЗДІЛ ЗА

  • Це необов’язкова пропозиція, яка розбиває набір результатів на розділи (групи рядків). Потім функція ROW NUMBER() застосовується до кожного розділу та призначає кожному розділу номер рангу окремо.
  • Якщо ми опустимо пункт partition by, функція ROW_NUMBER розглядатиме весь результат як єдиний розділ і забезпечуватиме рейтинг у порядку зверху вниз.

СОРТУВАТИ ЗА

Цей пункт дозволяє нам сортувати рядки набору результатів у кожному розділі. Це обов’язкове положення, оскільки функція ROW_NUMBER() залежить від порядку.

приклад

Давайте розберемося на прикладі, як функція ROW_NUMBER працює в таблиці SQL Server. Спочатку ми створимо таблицю під назвою ' Особи ' використовуючи наведений нижче оператор:

 CREATE TABLE Persons ( person_name varchar(45) NOT NULL, product varchar(45) DEFAULT NULL, country varchar(25) DEFAULT NULL, price float, years int NOT NULL ); 

Далі ми додамо кілька записів у цю таблицю за допомогою наведеного нижче оператора:

 INSERT INTO Persons (person_name, product, country, price, years) VALUES ('Steffen', 'Computer', 'USA', 20000.00, 2018), ('Joseph', 'Laptop', 'India', 35000.00, 2016), ('Kevin', 'TV', 'USA', 15000.00, 2016), ('Thompson', 'Mobile', 'France', 12500.00, 2017), ('Donald', 'Laptop', 'England', 30000.00, 2018), ('Joseph', 'Mobile', 'India', 18000.00, 2018), ('Matthew', 'Desktop', 'France', 22000.00, 2017), ('Antonio', 'Mouse', 'England', 1200.00, 2016); 

Далі перевірте дані за допомогою ВИБРАТИ заява. Ми отримаємо такий результат:

Номер рядка SQL Server

1. Простий приклад ROW_NUMBER().

Наступне твердження відображає деталі особи та додає послідовне ціле число до кожного рядка за допомогою ROW_NUMBER():

 SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons; 

Тут ми не вказали речення PARTITION BY, тому функція ROW_NUMBER() розглядатиме весь набір результатів як одну секцію. Після виконання оператора ми отримаємо наступний результат:

Номер рядка SQL Server

2. ROW_NUMBER() над прикладом розділів

пріоритетна черга c++

У цьому прикладі використовується функція ROW NUMBER(), яка надає порядковий номер кожному запису в розділі таблиці. Він завжди повторно ініціалізував номер рядка, коли рік змінювався:

 SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons; 

Тут ми використали речення PARTITION BY, яке розділяє 'Особи' таблицю на розділи на основі 'роки' колонка. Після виконання ми отримаємо наступний результат:

Номер рядка SQL Server

3. ROW_NUMBER() Приклад розбиття на сторінки

Ми також можемо використовувати функцію ROW_NUMBER() для розбиття на сторінки. Наприклад , якщо ми хочемо отримати всю інформацію про людину в програмі за сторінками, ми спочатку призначимо кожному рядку порядковий номер за допомогою функції ROW_NUMBER(). По-друге, відсортуйте рядки за запитуваною сторінкою.

Наступне твердження пояснює це більш чітко:

 SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num &gt; 3 AND row_num <= 6; < pre> <p>It will give the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-4.webp" alt="SQL Server Row Number"> <p>If we do not want to use the <strong>subquery</strong> , we can use the <strong>common table expression (CTE)</strong> as below statement:</p> <pre> WITH CTE_Person AS ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) SELECT * FROM CTE_Person WHERE row_num &gt; 3 AND row_num <= 6; < pre> <p>In this example, we have first specified the CTE that uses the ROW_NUMBER() function to assign each row in the result set sequentially. Second, the outer query returned the desired result. After execution, we will get the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-5.webp" alt="SQL Server Row Number"> <h3>Conclusion</h3> <p>In this article, we learned how to give a sequential number to each record within a partition of a query using the ROW NUMBER() function in SQL Server.</p> <hr></=></pre></=>