logo

SQL serverio eilutės numeris

Eilutės numeris yra labiausiai paplitęs reitingavimo funkcija naudojamas SQL serveryje. Funkcija ROW_NUMBER(). sugeneruoja eilės numerį kiekvienai skaidinio eilutei gautoje išvestyje. Kiekviename skaidinyje pirmosios eilutės numeris prasideda 1. Visada turime naudoti RŪŠIUOTI PAGAL sąlyga, siekiant užtikrinti, kad numeriai būtų priskirti tinkama seka. Šios funkcijos grąžintos reikšmės yra iš BIG INT duomenų tipas. Ši funkcija pateikiama su SQL Server 2005 ir naujesnėmis MS SQL versijomis.

ROW_NUMBER nustato laikina vertė kai vykdoma užklausa. Jei norite gauti skaičius lentelėje, turite pamatyti TAPATYBĖ turtas ir SEKA . Kai SQL serverio funkcija ROW_NUMBER susiduria su dviem identiškomis reikšmėmis tame pačiame skaidinyje, ji joms priskiria skirtingus rango numerius. Reitingo numeris bus nustatytas pagal jų rodymo tvarką.

Nėra jokios garantijos, kad šios funkcijos grąžinta reikšmė kiekvienam vykdymui bus tokia pati, nebent yra teisinga:

  • Suskirstytų stulpelių reikšmės yra unikalios
  • ORDER BY stulpelių reikšmės yra unikalios
  • Skirstymo ir tvarkos pagal stulpelius derinys yra unikalus

Sintaksė

Toliau pateikiama sintaksė, iliustruojanti funkciją ROW_NUMBER():

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

Supraskime funkcijos ROW NUMBER() sintaksę:

BAIGTA

Svarbu suprasti šią sąlygą, kuri nurodo langą arba eilučių rinkinį, kurį veikia lango funkcija. PARTITION BY ir ORDER BY yra dvi galimos OVER sąlygos. OVER sakinio ORDER BY išraiška palaikoma, kai eilutės turi būti tam tikra tvarka, kad funkcija būtų vykdoma.

SKYRIUS

  • Tai yra neprivaloma sąlyga, kuri padalija rezultatų rinkinį į skaidinius (eilučių grupes). Tada funkcija ROW NUMBER() taikoma kiekvienam skaidiniui ir kiekvienam skirsniui priskiriamas rango numeris atskirai.
  • Jei skirsnį praleisime pagal sąlygą, funkcija ROW_NUMBER apdoros visą rezultatą kaip vieną skaidinį ir pateiks reitingą iš viršaus į apačią.

RŪŠIUOTI PAGAL

Ši sąlyga leidžia rūšiuoti rezultatų rinkinio eilutes kiekviename skaidinyje. Tai būtina sąlyga, nes funkcija ROW_NUMBER() priklauso nuo eilės.

Pavyzdys

Su pavyzdžiu supraskime, kaip funkcija ROW_NUMBER veikia SQL serverio lentelėje. Pirmiausia sukursime lentelę pavadinimu ' Asmenys “, naudojant toliau pateiktą teiginį:

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

Toliau į šią lentelę įtrauksime kai kuriuos įrašus naudodami toliau pateiktą teiginį:

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

Tada patikrinkite duomenis naudodami PASIRINKTI pareiškimas. Gausime žemiau pateiktą išvestį:

oi sąvokos
SQL serverio eilutės numeris

1. Paprastas ROW_NUMBER() pavyzdys

Tolesnis teiginys rodoma asmens informacija ir pridedamas nuoseklus sveikasis skaičius į kiekvieną eilutę naudodami ROW_NUMBER():

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

Čia nenurodėme sąlygos PARTITION BY, kad funkcija ROW_NUMBER() laikytų visą rezultatų rinkinį kaip vieną skaidinį. Įvykdę teiginį, gausime tokią išvestį:

SQL serverio eilutės numeris

2. ROW_NUMBER() virš skaidinių pavyzdžio

Šiame pavyzdyje naudojama funkcija ROW NUMBER() suteikia eilės numerį kiekvienam lentelės skaidinio įrašui. Ji visada iš naujo inicijuoja eilutės numerį, kai pasikeičia metai:

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

Čia mes panaudojome sąlygą PARTITION BY, kuri padalija 'asmenys' lentelę į skaidinius remiantis 'metai' stulpelyje. Po vykdymo gausime žemiau pateiktą išvestį:

SQL serverio eilutės numeris

3. ROW_NUMBER() Puslapių spausdinimo pavyzdys

Taip pat galime naudoti funkciją ROW_NUMBER() puslapių rūšiavimui. Pavyzdžiui , jei norime gauti visą asmens informaciją programoje pagal puslapius, pirmiausia kiekvienai eilutei priskirsime eilės numerį naudodami funkciją ROW_NUMBER(). Antra, surūšiuokite eilutes pagal pageidaujamą puslapį.

Šis teiginys tai paaiškina aiškiau:

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