logo

SQL Server sorszáma

A sorszám a leggyakoribb rangsorolási funkció SQL Serverben használják. A ROW_NUMBER() függvény sorszámot generál a partíción belül minden sorhoz az eredményül kapott kimenetben. Minden partícióban az első sor száma 1-gyel kezdődik. Mindig használjuk a RENDEZÉS záradékkal annak biztosítására, hogy a számok a megfelelő sorrendben legyenek hozzárendelve. A függvény által visszaadott értékek a következők BIG INT adattípus. Ez a funkció az SQL Server 2005 és újabb MS SQL verzióihoz tartozik.

A ROW_NUMBER határozza meg a ideiglenes érték amikor a lekérdezés végrehajtódik. Ha a számokat táblázatba szeretné kapni, akkor látnia kell a IDENTITÁS ingatlan és SORREND . Amikor az SQL Server ROW_NUMBER függvénye két azonos értékkel találkozik ugyanabban a partícióban, különböző rangszámokat rendel hozzájuk. A rangszámot a megjelenítési sorrend határozza meg.

Nincs garancia arra, hogy a függvény által visszaadott érték minden egyes végrehajtásnál azonos sorrendbe kerül, kivéve, ha az alábbiak igazak:

  • A particionált oszlopok értékei egyediek
  • ORDER BY oszlopok értékei egyediek
  • A Partition és Order By oszlopok kombinációja egyedi

Szintaxis

A következő szintaxis illusztrálja a ROW_NUMBER() függvényt:

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

Ismerjük meg a ROW NUMBER() függvény szintaxisát:

FELETT

Fontos megérteni ezt a záradékot, amely meghatározza azt az ablakot vagy sorkészletet, amelyet az ablak funkció működtet. A PARTITION BY és az ORDER BY az OVER záradék két lehetséges kitétele. Az OVER záradék ORDER BY kifejezése akkor támogatott, ha a soroknak meghatározott sorrendben kell érkezniük a függvény végrehajtásához.

PARTÍCIÓ:

  • Ez egy opcionális záradék, amely az eredményhalmazt partíciókra (sorcsoportokra) osztja. Ezután a ROW NUMBER() függvény minden partícióra vonatkozik, és minden partícióhoz külön-külön rendeli a rangszámot.
  • Ha kihagyjuk a partíciót a záradékkal, a ROW_NUMBER függvény a teljes eredményt egyetlen partícióként kezeli, és a fentről lefelé haladó sorrendet biztosít.

RENDEZÉS

Ez a záradék lehetővé teszi, hogy az eredményhalmaz sorait rendezzük az egyes partíciókon belül. Kötelező záradék, mert a ROW_NUMBER() függvény sorrendfüggő.

linux parancsok mappa létrehozása

Példa

Nézzük meg egy példán keresztül, hogyan működik a ROW_NUMBER függvény az SQL Server táblában. Először létrehozunk egy táblát Személyek ' az alábbi állítást használva:

c++ hasító karakterlánc
 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 ); 

Ezután hozzáadunk néhány rekordot ebbe a táblázatba az alábbi utasítással:

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

Ezután ellenőrizze az adatokat a KIVÁLASZTÁS nyilatkozat. Az alábbi kimenetet kapjuk:

SQL Server sorszáma

1. Egyszerű ROW_NUMBER() példa

A következő kijelentés megjeleníti a személy adatait, és hozzáad egy szekvenciális egész számot minden sorhoz a ROW_NUMBER() használatával:

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

Itt nem adtuk meg a PARTITION BY záradékot, így a ROW_NUMBER() függvény a teljes eredménykészletet egyetlen partícióként kezeli. Az utasítás végrehajtása után a következő kimenetet kapjuk:

SQL Server sorszáma

2. ROW_NUMBER() partíciós példa felett

Ebben a példában a ROW NUMBER() függvény egy sorszámot ad a tábla partícióján belüli minden rekordhoz. Mindig újrainicializálja a sorszámot, amikor az év változik:

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

Itt a PARTITION BY záradékot használtuk, amely felosztja a 'személyek' táblát partíciókra az alapján 'évek' oszlop. A végrehajtás után az alábbi kimenetet kapjuk:

java string int konverzió
SQL Server sorszáma

3. ROW_NUMBER() Példa a lapozáshoz

Lapozáshoz használhatjuk a ROW_NUMBER() függvényt is. Például , ha egy alkalmazásban egy személy összes információját oldalanként szeretnénk megszerezni, először minden sorhoz sorszámot rendelünk a ROW_NUMBER() függvény segítségével. Másodszor, rendezze a sorokat a kívánt oldal szerint.

A következő kijelentés világosabban magyarázza ezt:

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