logo

SQL Server-rijnummer

Rijnummer is het meest gebruikelijk rangschikkingsfunctie gebruikt in SQL Server. De functie ROW_NUMBER(). genereert een volgnummer voor elke rij binnen een partitie in de resulterende uitvoer. In elke partitie begint het nummer op de eerste rij met 1. We moeten altijd de gebruiken BESTEL DOOR clausule om ervoor te zorgen dat de nummers in de juiste volgorde worden toegewezen. De waarden die door deze functie worden geretourneerd zijn van GROTE INT data type. Deze functie wordt geleverd bij SQL Server 2005 en latere MS SQL-versies.

Het ROW_NUMBER bepaalt de tijdelijke waarde wanneer de query wordt uitgevoerd. Als je de getallen in een tabel wilt zien, moet je de IDENTITEIT eigendom en REEKS . Wanneer de functie ROW_NUMBER in SQL Server twee identieke waarden in dezelfde partitie tegenkomt, worden er verschillende rangnummers aan toegewezen. Het rangnummer wordt bepaald door de volgorde waarin ze worden weergegeven.

Er is geen garantie dat de door deze functie geretourneerde waarde voor elke uitvoering hetzelfde zal worden besteld, tenzij het volgende waar is:

  • Gepartitioneerde kolomwaarden zijn uniek
  • ORDER BY-kolomwaarden zijn uniek
  • De combinatie van de kolommen Partition en Order By is uniek

Syntaxis

Hieronder volgt de syntaxis die de functie ROW_NUMBER() illustreert:

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

Laten we de syntaxis van de functie RIJNUMMER() begrijpen:

OVER

Het is belangrijk om deze clausule te begrijpen, die het venster of de reeks rijen specificeert waarin de vensterfunctie werkt. De PARTITION BY en ORDER BY zijn de twee mogelijke clausules van de OVER-clausule. De ORDER BY-expressie van de OVER-clausule wordt ondersteund wanneer de rijen in een specifieke volgorde moeten staan ​​voordat de functie kan worden uitgevoerd.

PARTITIE DOOR

  • Het is een optionele clausule die de resultatenset opsplitst in partities (groepen rijen). Vervolgens wordt de functie ROW NUMBER() op elke partitie toegepast en wordt het rangnummer van elke partitie afzonderlijk toegewezen.
  • Als we de partitie partitie weglaten, zal de functie ROW_NUMBER het hele resultaat als een enkele partitie behandelen en een rangschikking van boven naar beneden bieden.

BESTEL DOOR

Met deze clausule kunnen we de rijen van de resultatenset binnen elke partitie sorteren. Het is een vereiste clausule omdat de functie ROW_NUMBER() orderafhankelijk is.

Voorbeeld

Laten we met een voorbeeld begrijpen hoe de functie ROW_NUMBER werkt in de SQL Server-tabel. Eerst zullen we een tabel maken met de naam ' Personen ' met behulp van de onderstaande verklaring:

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

Vervolgens zullen we enkele records aan deze tabel toevoegen met behulp van de onderstaande verklaring:

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

Controleer vervolgens de gegevens met behulp van de SELECTEER stelling. We krijgen de onderstaande uitvoer:

dateformat.format java
SQL Server-rijnummer

1. Eenvoudig ROW_NUMBER() voorbeeld

De volgende verklaring geeft de details van de persoon weer en voegt een doorlopend geheel getal toe naar elke rij met behulp van ROW_NUMBER():

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

Hier hebben we de clausule PARTITION BY niet gespecificeerd, zodat de functie ROW_NUMBER() de hele resultatenset als één enkele partitie zal behandelen. Na uitvoering van de instructie krijgen we de volgende uitvoer:

SQL Server-rijnummer

2. ROW_NUMBER() over partities Voorbeeld

De functie ROW NUMBER() wordt in dit voorbeeld gebruikt en geeft een volgnummer aan elke record binnen een partitie in een tabel. Het initialiseert altijd het rijnummer opnieuw wanneer het jaar verandert:

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

Hier hebben we de PARTITION BY-clausule gebruikt die de 'Personen' tabel in partities op basis van de 'jaren' kolom. Na uitvoering krijgen we de onderstaande uitvoer:

SQL Server-rijnummer

3. ROW_NUMBER() Voorbeeld voor paginering

We kunnen ook de functie ROW_NUMBER() gebruiken voor paginering. Bijvoorbeeld Als we alle informatie van een persoon in een toepassing per pagina willen ophalen, wijzen we eerst elke rij een volgnummer toe met behulp van de functie ROW_NUMBER(). Ten tweede sorteert u de rijen op de gevraagde pagina.

De volgende verklaring legt het duidelijker uit:

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