logo

Číslo riadku servera SQL

Číslo riadku je najbežnejšie hodnotiaca funkcia používané v SQL Serveri. Funkcia ROW_NUMBER(). vygeneruje poradové číslo pre každý riadok v rámci oddielu vo výslednom výstupe. V každej partícii začína číslo prvého riadku 1. Vždy musíme použiť ZORADIŤ PODĽA aby sa zabezpečilo, že čísla budú pridelené v správnom poradí. Hodnoty vrátené touto funkciou sú of BIG INT Dátový typ. Táto funkcia sa dodáva s SQL Server 2005 a novšími verziami MS SQL.

Číslo ROW_NUMBER určuje dočasnú hodnotu keď sa dotaz vykoná. Ak chcete získať čísla v tabuľke, musíte vidieť IDENTITA majetok a SEKVENCIA . Keď funkcia ROW_NUMBER v SQL Server narazí na dve identické hodnoty v rovnakom oddiele, priradí im rôzne poradové čísla. Poradové číslo bude určené podľa poradia, v ktorom sú zobrazené.

Neexistuje žiadna záruka, že hodnota vrátená touto funkciou bude pri každom spustení zoradená rovnako, pokiaľ nie je splnené nasledovné:

  • Hodnoty rozdelených stĺpcov sú jedinečné
  • Hodnoty stĺpcov ORDER BY sú jedinečné
  • Kombinácia stĺpcov Partition a Order By je jedinečná

Syntax

Nasleduje syntax, ktorá ilustruje funkciu ROW_NUMBER():

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

Pochopme syntax funkcie ROW NUMBER():

KONIEC

Je dôležité pochopiť túto klauzulu, ktorá špecifikuje okno alebo množinu riadkov, ktoré funkcia okna ovláda. PARTITION BY a ORDER BY sú dve možné klauzuly klauzuly OVER. Výraz ORDER BY klauzuly OVER je podporovaný, keď riadky musia prísť v špecifickom poradí, aby sa funkcia vykonala.

PARTIE BY

  • Je to voliteľná klauzula, ktorá rozdeľuje množinu výsledkov na časti (skupiny riadkov). Potom sa funkcia ROW NUMBER() aplikuje na každú partíciu a pridelí každej partícii poradové číslo samostatne.
  • Ak vynecháme oddiel podľa klauzuly, funkcia ROW_NUMBER bude s celým výsledkom zaobchádzať ako s jedným oddielom a poskytne poradie v poradí zhora nadol.

ZORADIŤ PODĽA

Táto klauzula nám umožňuje triediť riadky sady výsledkov v rámci každého oddielu. Je to povinná klauzula, pretože funkcia ROW_NUMBER() je závislá od poradia.

Príklad

Pozrime sa na príklade, ako funguje funkcia ROW_NUMBER v tabuľke servera SQL Server. Najprv vytvoríme tabuľku s názvom ' Osoby “ pomocou nižšie uvedeného vyhlásenia:

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

Ďalej do tejto tabuľky pridáme niekoľko záznamov pomocou nasledujúceho prí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); 

Potom overte údaje pomocou SELECT vyhlásenie. Získame nasledujúci výstup:

Číslo riadku servera SQL

1. Jednoduchý príklad ROW_NUMBER().

Nasledujúce vyhlásenie zobrazí podrobnosti o osobe a pridá sekvenčné celé číslo do každého riadka pomocou ROW_NUMBER():

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

Tu sme nešpecifikovali klauzulu PARTITION BY, takže funkcia ROW_NUMBER() bude považovať celú sadu výsledkov za jednu oblasť. Po vykonaní príkazu dostaneme nasledujúci výstup:

Číslo riadku servera SQL

2. Príklad ROW_NUMBER() nad oddielmi

Funkcia ROW NUMBER() použitá v tomto príklade poskytuje poradové číslo každému záznamu v rámci oddielu v tabuľke. Vždy znova inicializovalo číslo riadku, keď sa zmenil rok:

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

Tu sme použili klauzulu PARTITION BY, ktorá rozdeľuje 'osoby' tabuľku do oddielov na základe 'roky' stĺpec. Po vykonaní dostaneme nasledujúci výstup:

Číslo riadku servera SQL

3. ROW_NUMBER() Príklad pre stránkovanie

Na stránkovanie môžeme použiť aj funkciu ROW_NUMBER(). Napríklad , ak chceme získať všetky informácie o osobe v aplikácii podľa stránok, najprv priradíme každému riadku poradové číslo pomocou funkcie ROW_NUMBER() . Po druhé, zoraďte riadky podľa požadovanej stránky.

Nasledujúce vyhlásenie to vysvetľuje jasnejšie:

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