logo

Číslo řádku SQL Serveru

Číslo řádku je nejčastější hodnotící funkce používané v SQL Serveru. Funkce ROW_NUMBER(). vygeneruje pořadové číslo pro každý řádek v rámci oddílu ve výsledném výstupu. V každém oddílu začíná číslo prvního řádku 1. Vždy musíme použít SEŘADIT PODLE klauzule, která zajistí, že čísla budou přiřazena ve správném pořadí. Hodnoty vrácené touto funkcí jsou of VELKÝ INT datový typ. Tato funkce je dodávána s SQL Server 2005 a novějšími verzemi MS SQL.

Číslo ROW_NUMBER určuje dočasnou hodnotu když je dotaz proveden. Pokud chcete získat čísla v tabulce, musíte vidět IDENTITA majetek a SEKVENCE . Když funkce ROW_NUMBER na SQL Server narazí na dvě identické hodnoty ve stejném oddílu, přiřadí jim různá čísla pořadí. Pořadové číslo bude určeno pořadím, ve kterém jsou zobrazeny.

Neexistuje žádná záruka, že hodnota vrácená touto funkcí bude při každém spuštění objednána stejně, pokud neplatí následující:

  • Hodnoty rozdělených sloupců jsou jedinečné
  • Hodnoty sloupců ORDER BY jsou jedinečné
  • Kombinace sloupců Partition a Order By jsou jedinečné

Syntax

Následující syntaxe ilustruje funkci ROW_NUMBER():

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

Pojďme pochopit syntaxi funkce ROW NUMBER():

PŘES

Je důležité porozumět této klauzuli, která určuje okno nebo sadu řádků, které funkce okna ovládá. PARTITION BY a ORDER BY jsou dvě možné klauzule klauzule OVER. Výraz ORDER BY klauzule OVER je podporován, když řádky musí přijít v určitém pořadí, aby se funkce provedla.

ROZDĚLENÍ PODLE

  • Je to volitelná klauzule, která rozděluje sadu výsledků na oddíly (skupiny řádků). Potom je funkce ROW NUMBER() aplikována na každý oddíl a přiřazuje pořadové číslo každého oddílu samostatně.
  • Pokud vynecháme oddíl podle klauzule, funkce ROW_NUMBER bude s celým výsledkem zacházet jako s jedním oddílem a poskytne pořadí v pořadí shora dolů.

SEŘADIT PODLE

Tato klauzule nám umožňuje seřadit řádky sady výsledků v rámci každého oddílu. Je to povinná klauzule, protože funkce ROW_NUMBER() je závislá na pořadí.

Příklad

Pojďme pochopit, jak funguje funkce ROW_NUMBER v tabulce SQL Server na příkladu. Nejprve vytvoříme tabulku s názvem ' Osoby “ pomocí níže uvedeného prohlášení:

ten nejkrásnější úsměv
 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 ); 

Dále do této tabulky přidáme několik záznamů pomocí následujícího příkazu:

 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); 

Dále ověřte data pomocí VYBRAT prohlášení. Získáme následující výstup:

Číslo řádku SQL Serveru

1. Jednoduchý příklad ROW_NUMBER().

Následující prohlášení zobrazí podrobnosti o osobě a přidá sekvenční celé číslo do každého řádku pomocí ROW_NUMBER():

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

Zde jsme nezadali klauzuli PARTITION BY, takže funkce ROW_NUMBER() bude považovat celou sadu výsledků za jeden oddíl. Po provedení příkazu získáme následující výstup:

Číslo řádku SQL Serveru

2. Příklad ROW_NUMBER() přes oddíly

Funkce ROW NUMBER() použitá v tomto příkladu poskytuje pořadové číslo každému záznamu v oddílu v tabulce. Při změně roku vždy znovu inicializovalo číslo řádku:

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

Zde jsme použili klauzuli PARTITION BY, která rozděluje 'osoby' tabulky do oddílů na základě 'roky' sloupec. Po provedení získáme následující výstup:

Číslo řádku SQL Serveru

3. ROW_NUMBER() Příklad pro stránkování

Pro stránkování můžeme také použít funkci ROW_NUMBER(). Například , pokud chceme získat všechny informace o osobě v aplikaci po stránkách, nejprve přiřadíme každému řádku pořadové číslo pomocí funkce ROW_NUMBER(). Za druhé, seřaďte řádky podle požadované stránky.

Následující prohlášení to vysvětluje jasněji:

 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></=>